2011-10-02 2 views
6

надеюсь, что вы можете мне помочь: Я пытаюсь определить, является ли устройство съемным или нет, все, что у меня есть, - это имя устройства (/ 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 = открыт ("название") фл = fged (FD) где эт указывает на "файл" структура)

ответ

1

Вы можете выполнять итерацию по блочным устройствам с использованием class_dev_iter_init и class_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/removeable, поскольку он должен содержать 1, если устройство является съемным или 0, если нет. (dev-name = имя устройства: sda, hda, fd0, ...)

+0

Я знаю об этом, но он не работает в старых версиях Linux, так или иначе, спасибо. – Makc

+0

Кроме того, я не знаю никаких безопасных способов чтения файлов из модулей ядра. (Я пробовал sys_read() и vfs_read() - это причины «Oops» :)) Может быть, вы знаете какие-либо способы доступа к sysfs из модуля ядра? – Makc

 Смежные вопросы

  • Нет связанных вопросов^_^