2014-01-04 5 views
1

Недавно я разработал простой модуль ядра файловой системы. Итак, мне нужно было назначить свою собственную функцию ioctl (.unlocked_ioctl) структуре file_operation для реализации определенных команд для модуля моей файловой системы. Например, файловая система Ext4 имеет свою собственную функцию ioctl.Доступ к файловой системе через функцию ioctl

Затем я создал файл с помощью команды dd и установил его:

# mount -t myfs -o loop simple_file /mnt/ 

Все отлично работает, но как я могу получить доступ к этой файловой системе с помощью IOCTL с пользователем космической программой?

I судимого сделать ioctl(fd, MY_COMMAND_1, &my_struct_t); (где fd является дескриптором файла из Dev файла /dev/loop[0..7]), но он возвращает меня Invalid argument.

ответ

3

Если вы открываете /dev/loop0, вы получаете доступ к устройству loop, и, следовательно, вы говорите с драйвером цикла.

Обработчик ioctl, который вы зарегистрировали для своей файловой системы, относится к файлам, открытым в смонтированной файловой системе.

fd = open("/mnt/something", O_RDWR); 
ioctl(fd, MY_COMMAND_1, &my_struct_t); 
+0

Thanks @Gilles. Я сделал это, но он вернул мне «Недопустимый ioctl для устройства». Итак, я заметил, что я использовал 'file_operations' только для каталогов, и я изменил на' fd = open ("/ mnt/something /", O_RDWR); и код работал. знак равно – jcfaracco

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