НАЗВА
іoctl - керує пристроями
СИНТАКСИС
#include <sys/ioctl.h>
int ioctl(int d, int request, ...);
/ третім аргументом, як правило є char argp */
ОПИС
Функція іoctl керує пристроями , на які посилаються спеціальні файли. За допомогою запитів іoctl можна керувати багатьма символьними пристроями (character devices) (наприклад, терміналами). Аргумент d повинен бути відкритим дескриптором файлу (пристрою).
Другий аргумент, request, є залежним від пристрою, кодом запиту. Третім аргументом є покажчик на пам'ять, що не має типу. Це традиційно char argp (ще з тих часів, коли void було чинним C), і ми так і будемо використовувати його у цій дискусії.
Параметр request має вбудовану в собі інформацію, чи являється третій аргумент вхідним чи вихідним і, додатково, розмір argp у байтах. Макроси і визначення define, що використовуються для виклику запитів request функції іoctl, знаходяться у файлі <sys/ioctl.h>.
ПОВЕРНЕНЕ ЗНАЧЕННЯ
Звичайно, при успішному завершенні повертається нульове значення. Деякі іoctl використовують повернене значення як параметр виводу і при успішному завершенні повертають позитивне значення. При помилці повернене значення дорівнює -1, і errno присвоюється код помилки.
КОДИ ПОМИЛОК
EBADF : d не є чинним дескриптором.
EFAULT : argp посилається на недоступну область адресного простору.
ENOTTY : d не відповідає символьному пристроєві.
ENOTTY : Вказаний запит не застосовується до типу об'єкта, на який посилається дескриптор d.
EІNVAL : Невірно вказані request або argp.
ВІДПОВІДНІСТЬ СТАНДАРТАМ
Не існує єдиного стандарту. Аргументи, повернені значення і семантика ioctl(2) різні у кожному конкретному випадку, в залежності від драйвера пристрою (виклик є загальним для всіх операцій, що не вписуються у модель потокового вводу/виводу Unix). Передивіться ?ioctl list(2), у якому перелічені більшість викликів іoctl. Виклик іoctl уперше з'явився у версії 7 AT&T Unix.
ДИВІТЬСЯ ТАКОЖ
execve(2), ?fcntl(2), ?ioctl list(2), ?mt(4), ?sd(4), ?tty(4)
Переклав українською Віталій Цибуляк.