получить флаги устройства по имени устройства - PullRequest
7 голосов
/ 02 октября 2011

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 02 октября 2011

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

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

1 голос
/ 02 октября 2011

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

...