2013-12-15 3 views
0

Прототип системного вызова IOCTL в Linux являетсяО системном вызове IOCTL

int ioctl(struct inode *, struct file *, unsigned int, unsigned long); 

Все другие файловые операции, как чтение(), писать(), llseek(), ММАП() и т.д .. есть только структура файла * как аргумент. Но, почему вызов IOCTL требует передачи struct inode *. Есть ли какое-либо конкретное использование?

+0

http://linux.die.net/man/2/ioctl –

ответ

0

Какую версию ядра вы используете, теперь ioctl не имеет указателя inode в качестве параметра. Раньше это было, но я думаю, что с ядра 2.6.36 он был удален.

+0

В LDD3 прототип IOCTL указан так, я думаю, что LDD3 ссылается на ядро ​​2.6.10. –

+1

Большая часть API была изменена после книги LDD3, поэтому не ищите имена функций и имена переменных в LDD3, читайте эту книгу только для понятий и переходите и читайте исходный код ядра версии, для которой вы работаете фактическое использование функций. – knare

0

Прототип ioctl, по крайней мере, соответствует man-странице, int ioctl(int d, int request, ...);. Важен бит ... - переменные аргументы, что означает, что остальные аргументы зависят от первых, так же как printf. Любое использование для struct inode * будет связано с конкретным запросом ioctl.

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