2013-05-21 2 views
1

Попытка понять, почему в сокете есть вызовы ioctl? Я могу видеть модифицированное ядро, которое я использую, оно имеет некоторые вызовы ioctl, которые загружаются в нужные модули при выполнении вызовов.Почему существуют вызовы ioctl в socket.c?

Мне было интересно, почему эти вызовы оказались в socket.c? Является не сокет типа не-устройства и ioctls в основном используются для устройства.

Говоря о 2.6.32.0 сильно модифицированное ядро ​​здесь.

ответ

2

ioctl страдает от своего исторического названия. Хотя он был первоначально разработан для управления элементами ввода/вывода на устройствах, он имеет достаточно общую конструкцию, которая может использоваться для произвольных запросов на обслуживание ядра в контексте файлового дескриптора. Дескриптор файла - это непрозрачное значение (просто int), предоставляемое ядром, которое может быть связано с чем угодно.

Теперь, если вы обрабатываете дескриптор файла и думаете о вещах как о файлах, что делает большинство конструкций * nix, open/read/write/close недостаточно. Что делать, если вы хотите пометить файл (переименовать)? что, если вы хотите дождаться появления файла (ioctl)? что, если вы хотите завершить все, если файл закрывается (termios)? все операции «meta», которые не имеют смысла в основном контексте чтения/записи, сосредоточены под ioctls; fctls; и т. д., если они так часто не используются, что они заслуживают своего системного вызова (например, функции flock (2) в BSD4.2)

+0

да эта информация помогает. Спасибо за ответ. –

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