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 присваивается код ошибки.