2011-10-02 83 views
6

希望你能帮助我: 我试图确定设备是否可移动或不是,我拥有的是设备名称(/ dev/sdc)。实际上,我需要通过此文件的完整路径来确定何时可移动介质上的文件或本地磁盘上的文件。获取设备标志的设备名称

我tryed在 电流 - > FS-> PWD 搜索和所有我能找到的是一组标志的位置: *电流 - > FS-> pwd.mnt-> mnt_sb- > s_bdev-> bd_disk->标志* 其中用于移动设备

但我总是设置相同的标志(据我所知,s_bdev总是指向相同的设备(/ dev/sda上))GENHD_FL_REMOVABLE集。

因此,现在我通过解析mtab获取包含我的文件的设备名称(/ dev/sdc),但仍然找不到,可以移除它。

有没有可能通过设备名获得block_device结构? (例如, “文件” 结构可通过调用 FD =打开( “名称”) FL = fged(FD) 获得其中f1点为 “文件” 的结构)

回答

1

您可以使用class_dev_iter_initclass_dev_iter_next迭代块设备。请参阅block/genhd.cblk_lookup_devt中的代码以了解使用方法。

一旦你有了设备,你可以使用dev_to_disk得到一个struct gendisk *,你可以在其中检查可移动标志。

+0

谢谢,似乎它解决了我的问题 – Makc

+0

因此,如何使用这种方式,我可以确定哪个块设备包含我打开的文件,如果我只有完整的路径这个文件。 – Makc

+1

@Makc:我认为你可以使用'vfs_stat',它会给你一个'struct kstat',你可以在其中将'dev_t'与块设备进行比较。 – Hasturkun

1

读/ SYS /块/ dev-name /可移动,因为如果设备是可移动的,它应该包含1,否则为0。 (dev-name =设备名称:sda,hda,fd0,...)

+0

我知道这件事,但它不适用于旧的linux版本,无论如何,谢谢。 – Makc

+0

此外,我不知道任何安全的方式来从内核模块中读取文件。 (我已经尝试了sys_read()和vfs_read() - 这是导致“糟糕”:))也许你知道任何方式来访问内核模块的sysfs? – Makc