получить флаги устройств по имени устройства

надеюсь, вы можете мне помочь: Я пытаюсь определить, является ли устройство съемным или нет, у меня есть имя устройства (/dev/sdc в). На самом деле, мне нужно определить, когда файл на съемном носителе или на локальном диске по полному пути этого файла.

Я попытался найти в текущий - >fs - >pwd и все, что я смог найти-это набор флагов здесь: * текущий - >fs - >pwd.mnt - >mnt_sb - >s_bdev - >bd_disk - >флаги* где GENHD_FL_REMOVABLE набор для съемных устройств

но я всегда получайте одинаковые флаги (как я понимаю, s_bdev всегда указывает на одно и то же устройство (/dev/sda)).

Итак, теперь я получаю имя устройства (/dev/sdc), содержащее мой файл, путем синтаксического анализа mtab, но все еще не могу узнать, удалить его или нет.

есть ли способ получить структуру block_device по имени устройства? (например, структура "файл" может быть получена путем вызова ФД = открыть("имя") fl = fged(fd) где fl указывает на" файловую " структуру)

2 ответов


вы можете перебирать блочные устройства с помощью class_dev_iter_init и class_dev_iter_next. См. код в block/genhd.c blk_lookup_devt для использования.

если у вас есть устройство, вы можете использовать dev_to_disk и struct gendisk *, в которой вы можете проверить съемный флаг.


Read/sys/block/dev-name / removable как он должен содержать 1, если устройство является съемным или 0, если нет. (dev-name = Имя устройства: sda, hda, fd0,...)