IOCTL(2) IOCTL(2)
НАЗВАНИЕ
ioctl - управление устройствами
СИНТАКСИС
ioctl (fildes, command, arg)
int fildes, command;
ОПИСАНИЕ
Системный вызов ioctl выполняет различные управляющие
действия над обычными устройствами и псевдоустройства-
ми. Для файлов, не являющихся псевдоустройствами, дей-
ствия, которые выполняет этот системный вызов, зависят
от устройства. Аргументы command и arg передаются в
файл, ассоциированный с дескриптором fildes, и интерп-
ретируются драйвером устройства. Подобный способ управ-
ления для обычных устройств используется редко; основ-
ные операции ввода/вывода выполняются с помощью систем-
ных вызовов read(2) и write(2).
Действия над псевдоустройствами, выполняемые с помощью
системного вызова ioctl, описаны в streamio(7).
Аргумент fildes - это открытый дескриптор файла, являю-
щегося устройством. Аргумент command задает выполняемые
действия и зависит от устройства, с которым ведется ра-
бота. Наконец, arg задает дополнительную информацию,
которая может потребоваться для выполнения указанных
действий. Тип аргумента arg зависит от конкретного уп-
равляющего действия и является либо целым, либо указа-
телем на специфичную для устройства структуру.
Отметим, что существуют некоторые общие действия, кото-
рые выполняются драйверами различных устройств, напри-
мер общий интерфейс с терминалом [см. termio(7)].
Системный вызов ioctl завершается неудачей для файлов
любого типа, если выполнено хотя бы одно из следующих
условий:
[EBADF] Аргумент fildes не является корректным
дескриптором открытого файла.
[ENOTTY] Аргумент fildes не связан с устройством,
драйвер которого отрабатывает управляющие
функции.
[EINTR] Во время выполнения системного вызова пе-
рехвачен сигнал.
Системный вызов ioctl также завершается неудачей, если
драйвер устройства обнаружит ошибку. В этом случае
ошибка возвращается системным вызовом без изменений.
Конкретный драйвер может вырабатывать не все ошибки из
перечисленных ниже:
[EFAULT] Действие command требует обмена данными с
буфером, указанным с помощью аргумента arg,
но сам буфер или его часть находятся за
пределами отведенного процессу адресного
пространства.
[EINVAL] Значения аргументов command или arg некор-
ректны для данного устройства.
[EIO] Обнаружена ошибка ввода/вывода.
[ENXIO] Значения аргументов command или arg кор-
ректны для данного драйвера, но над данным
устройством указанный запрос не может быть
выполнен.
[ENOLINK] Аргумент fildes является дескриптором файла
на удаленном компьютере, связи с которым в
данный момент нет.
Ошибки псевдоустройств описаны в streamio(7).
СМ. ТАКЖЕ
streamio(7), termio(7) в Справочнике администратора.
ДИАГНОСТИКА
При успешном завершении результат зависит от управляю-
щего действия, но должен быть неотрицательным целым
числом. В случае ошибки возвращается -1, а переменной
errno присваивается код ошибки.
|