Man:Man2/ioctl.2
Матеріал з docs.linux.org.ua — збірника документації з Unix/Linux українською мовою.
Зміст |
НАЗВА
і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)
Переклав українською Віталій Цибуляк.

