我使用的是 Linux (Ubuntu 11.10)。 好吧,当我打开系统调用时,例如在 C 程序中:
size_t filedesc = open("testfile.txt",O_CREAT | O_WRONLY,0640);
我如何访问分区,我的意思是有没有办法返回使用的分区?
系统调用open就是上面定义的:
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
如果需要,我可以输入 printk("%s",filename)
并查看路径。但是我如何访问分区?
例如:我在两个不同的分区(例如/dev/sda1 和/dev/sda2)中有两个存档 example.txt。
然后我打开系统调用:假设我在分区/dev/sda2 中调用了 example.txt。
有没有办法使用开放系统调用来访问分区(例如,printk(KERN_ALERT "%s",partition)
)?
最佳答案
没有事情像您希望的那么简单。
在 do_sys_open()
函数中,紧接在 return fd;
之前,struct file *f
指向一个合法的、打开的、结构文件
。
struct file
包含一个struct path f_path
。
struct path
包含一个struct vfsmount *mnt
。 struct vfsmount
表示系统上每个已安装的文件系统。
struct vfsmount
包含一个struct super_block *mnt_sb
。
struct super_block
包含一个struct block_device *s_bdev
。
struct block_device
包含一个struct hd_struct *bd_part
。
struct hd_struct
包含一个struct device __dev
和一个int partno
。这两个共同定义了您的文件所在的分区。
更新
当我找到设备和分区编号引用时,我最初停止寻找,因为我认为这就是将人类友好的字符串组合在一起所需的全部内容。但当用新的眼光再次审视时,我发现还有更多:
struct hd_struct
包含一个struct partition_meta_info *info
。
struct partition_meta_info
包含一个字段:
u8 volname[PARTITION_META_INFO_VOLNAMELTH];
此字段是您要查找的设备的名称。
关于c - 如何知道分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8193716/