Russian Belarusian English German Japanese Ukrainian

Ioctl

CuBook05

Функция

Управление устройствами ввода/вывода.
 
Синтаксис

int ioctl(int handle, int func[, int *argdx, int argcx]);
 
Прототип

io.h
 
Описание

Данная функция представляет собой непосредственный интерфейс для вызова функции DOS 0x44 (IOCTL).

Выполняемая функция зависит от значения параметра func следующим образом:
0 - Получение информации об устройстве.
1 - Установка информации об устройстве (в параметр argdx).
2 - Считывает argcx байт и помещает их по адресу, указанному в argdx.
3 - Записывает argcx байт из адреса, на который указывает argdx.
4 - Также, как и в ситуации 2, исключая то, что параметр handle трактуется, как номер дисковода (0= по умолчанию, 1=A, и т.д.).
5 - Также, как и в ситуации 3, за исключением того, что параметр handle трактуется, как номер дисковода(0= по умолчанию, 1=A, и т.д.).
6 - Получает статус ввода.
7 - Получает статус вывода.
8 - Тест на сменность; только для версий DOS 3.0.
11 - Устанавливает число повторов при конфликте разделения файлов; только для версий DOS 3.0.

Функция ioctl может быть использована для получения информации о каналах устройств. Могут использоваться также обычные файлы, но для них можно использовать только func равное 0, 6 и 7. Все остальные вызовы будут возвращать для файлов ошибочное значение EINVAL.

Аргументы argdx и argcx - необязательны.
Функция ioctl обеспечивает прямой интерфейс к специальным функциям драйверов устройств DOS.
 
Возвращаемое значение

Для значений параметра func - 0 или 1 возвращаемое значение представляет собой информацию об устройстве (в часности значение регистра DX, получаемое при вызове IOCTL).

Для значений func от 2 до 5, возвращаемое значение - это количество реально переданных байт.
Для значениея func 6 или 7, возвращаемое значение - это статус устройства.

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

Функция ioctl поддерживается на системах UNIX, но не с описанными выше параметрами. На системе UNIX версии 7 и системе SYSTEM III применение функции ioctl различно. Вызовы функции ioctl не переносимы на системах UNIX и очень редко переносятся с одной системы DOS на другую.

В версиях MS-DOS 3.0 параметр func разширен двумя значениями: 8 и 11.
 
Пример

#include <stdio.h>
#include <io.h>
#include <dir.h>

int main(void)
{
int stat;
/* функция 8 используется, чтобы определить, является ли диск, в текущем устройстве сменным */
stat = ioctl(0, 8, 0, 0);
printf("Диск %c %s сменный\n", getdisk() + 'A', (stat == 0) ? "" : "не");
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий