按设备名称获取设备标志

时间:2011-10-02 09:46:36

标签: c linux kernel block-device

希望你能帮助我: 我正在尝试确定设备是否可移动,我所拥有的只是设备名称(/ dev / sdc)。实际上,我需要通过此文件的完整路径确定可移动媒体或本地磁盘上的文件。

我试图搜索 电流 - > FS-> PWD 我所能找到的只是一组标志: *电流 - > FS-> pwd.mnt-> mnt_sb-> s_bdev-> bd_disk->标志* 其中GENHD_FL_REMOVABLE设置为可移动设备

但是我总是得到相同的标志设置(据我所知,得到的defdev总是指向同一个设备(/ dev / sda))。

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

是否有可能通过设备名称获取block_device结构? (例如,可以通过调用获得“文件”结构 fd = open(“name”) fl = fged(fd) 其中fl指向“文件”结构)

2 个答案:

答案 0 :(得分:2)

您可以使用class_dev_iter_initclass_dev_iter_next对块设备进行迭代。有关用法,请参阅block/genhd.c blk_lookup_devt中的代码。

拥有设备后,您可以使用dev_to_disk获取struct gendisk *,您可以在其中查看可移动标记。

答案 1 :(得分:1)

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