Unix Man (Справочное руководство)

         

IOCTL(2)


IOCTL(2)

НАЗВАНИЕ


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

СИНТАКСИС

ioctl (fildes, command, arg) int fildes, command;

ОПИСАНИЕ


Системный вызов ioctl выполняет различные управляющие действия над обычными устройствами и псевдоустройствами. Для файлов, не являющихся псевдоустройствами, действия, которые выполняет этот системный вызов, зависят от устройства. Аргументы command и arg передаются в файл, ассоциированный с дескриптором fildes, и интерпретируются драйвером устройства. Подобный способ управления для обычных устройств используется редко; основные операции ввода/вывода выполняются с помощью системных вызовов и .

Действия над псевдоустройствами, выполняемые с помощью системного вызова ioctl, описаны в .

Аргумент fildes - это открытый дескриптор файла, являющегося устройством. Аргумент command задает выполняемые действия и зависит от устройства, с которым ведется работа. Наконец, arg задает дополнительную информацию, которая может потребоваться для выполнения указанных действий. Тип аргумента arg зависит от конкретного управляющего действия и является либо целым, либо указателем на специфичную для устройства структуру.

Отметим, что существуют некоторые общие действия, которые выполняются драйверами различных устройств, например общий интерфейс с терминалом [см. ].

Системный вызов ioctl завершается неудачей для файлов любого типа, если выполнено хотя бы одно из следующих условий:

[EBADF] Аргумент fildes не является корректным дескриптором открытого файла. [ENOTTY] Аргумент fildes не связан с устройством, драйвер которого отрабатывает управляющие функции. [EINTR] Во время выполнения системного вызова перехвачен сигнал.

Системный вызов ioctl также завершается неудачей, если драйвер устройства обнаружит ошибку. В этом случае ошибка возвращается системным вызовом без изменений. Конкретный драйвер может вырабатывать не все ошибки из перечисленных ниже:

[EFAULT] Действие command требует обмена данными с буфером, указанным с помощью аргумента arg, но сам буфер или его часть находятся за пределами отведенного процессу адресного пространства. [EINVAL] Значения аргументов command или arg некорректны для данного устройства. [EIO] Обнаружена ошибка ввода/вывода. [ENXIO] Значения аргументов command или arg корректны для данного драйвера, но над данным устройством указанный запрос не может быть выполнен. [ENOLINK] Аргумент fildes является дескриптором файла на удаленном компьютере, связи с которым в данный момент нет.

Ошибки псевдоустройств описаны в .

СМ. ТАКЖЕ


, в Справочнике администратора.

ДИАГНОСТИКА


При успешном завершении результат зависит от управляющего действия, но должен быть неотрицательным целым числом. В случае ошибки возвращается -1, а переменной errno присваивается код ошибки.



Содержание раздела