我正在使用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)
并查看路径。但是我如何访问分区呢?
示例:我在两个不同的分区中有两个归档example.txt(例如/ dev / sda1和/ dev / sda2)。
然后我打开系统调用:假设我调用了分区/ dev / sda2中的example.txt。
有没有办法使用开放系统调用来访问分区(例如,printk(KERN_ALERT "%s",partition)
)?
答案 0 :(得分:3)
没有什么比你希望的更简单了。
在do_sys_open()
函数中,在return fd;
之前,struct file *f
指向合法的,已打开的struct file
。
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];
此字段是您所使用的设备的名称。
答案 1 :(得分:2)