怎么知道分区?

时间:2011-11-19 11:26:26

标签: c linux kernel system-calls

我正在使用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))?

2 个答案:

答案 0 :(得分:3)

没有什么比你希望的更简单了。

do_sys_open()函数中,在return fd;之前,struct file *f指向合法的,已打开的struct file

struct file包含struct path f_path

struct path包含struct vfsmount *mntstruct 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 __devint partno。这两个一起定义了文件所在的分区。

<强>更新

当我找到设备和分区号引用时,我原本停止了查看,因为我认为只需要将人类友好的字符串组合在一起。但是当我再次用新鲜的眼睛看时,我看到还有更多:

struct hd_struct包含struct partition_meta_info *info

struct partition_meta_info包含一个字段:

    u8 volname[PARTITION_META_INFO_VOLNAMELTH];

此字段是您所使用的设备的名称。

答案 1 :(得分:2)

通过shell,df /some/dir为您提供所涉及的文件系统。以编程方式,通过stat系统调用,您将获得st_dev字段。

添加:)我猜不出你想要做什么,但也许使用FUSE做这件事可能会更简单。