IOCTL(2)

ИМЯ
ioctl - управление устройствами

ОБЗОР
#include <sys/ioctl.h>

int ioctl(int d, int request, ...);

ОПИСАНИЕ
Функция ioctl манипулирует базовыми параметрами устройств, представленных в виде специальных файлов. В частности, многими оперативными характеристиками специальных символьных файлов (например терминалов) можно управлять через ioctl запросы. В качестве аргумента d должен быть указан открытый файловый дескриптор.

Второй аргумент является кодом запроса, который зависит от устройства. Третий аргумент является указателем на память, который не имеет типа. Традиционно это char *argp (до тех пор пока в C не появился void * ).

Ioctl запрос request кодирует в себе либо аргумент, который является параметром in либо аргумент, который является параметром out и кроме того размер аргумента argp в байтах. Макросы и определения, используемые в специальных ioctl запросах request находятся в файле <sys/ioctl.h>.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Обычно в случае успеха возвращается ноль. Некоторые ioctl используют возвращаемое значение как выходной параметр и возвращают в случае успеха неотрицательное значение. В случае ошибки возвращается -1 и значение errno устанавливается соответствующим образом.

ОШИБКИ

EBADF
    d не является правильным дескриптором.

EFAULT
    argp ссылается на недоступную область памяти.

ENOTTY
    d не ассоциирован со специальным символьным устройством.

ENOTTY
    Указанный запрос не применим к данному классу объекта, на который ссылается дескриптор d .

EINVAL
    Request или argp заданы неверно.

СООТВЕТСТВИЕ СТАНДАРТАМ
Нет единого стандарта. Аргументы, возвращаемые значения и семантики ioctl(2) варьируются в соответствии с драйвером устройства (вызов, используется как всеохватывающий, что не полностью соответствует потоковой модели ввода/вывода в Unix). Смотри ioctl_list(2) где дан список многих известных ioctl вызовов. Функция ioctl появилась в AT&T Unix версии 7.

СМОТРИ ТАКЖЕ
execve(2), fcntl(2), ioctl_list(2), mt(4), sd(4), tty(4)

ПЕРЕВОД
Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2003