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