Функция Управление устройствами ввода/вывода.
Синтаксис 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.
Смотрите более детальную информацию об аргументах
или возвращаемых значениях в "Справочном руководст-
ве программиста DOS" - в описании системного
вызова 0x44.
Аргументы argdx и argcx - необязательны.
Функция ioctl обеспечивает прямой интерфейс к спе-
циальным функциям драйверов устройств DOS. В ре-
зультате, точное поведение данной функции будет
изменяться в зависимости от поставщиков-производи-
телей мат. обеспечения и различных устройств. Кро-
ме того, некоторые фирмы не следуют правилам ин-
терфейса, описанным выше. Смотрите конкретное опи-
сание системы BIOS вашего конкретного поставщика,
чтобы найти точные правила использования функции
ioctl.
Возвращаемое Для значений параметра 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
#include
#include
int main(void)
{
int stat;
/* функция 8 используется, чтобы определить, является ли
диск, в текущем устройстве сменным */
stat = ioctl(0, 8, 0, 0);
printf("Диск %c %s сменный\n", getdisk() + 'A',
(stat == 0) ? "" : "не");
}