Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по функциям С++.doc
Скачиваний:
131
Добавлен:
02.05.2014
Размер:
3.57 Mб
Скачать

Intdosx

-----------------------------------------------------------------

НазначениеОбщий интерфейс программных прерываний MS-DOS.

Синтаксис #include<dos.h>

int intdosx(union REGS *inregs,

union REGS *outregs,union SREGS *segregs);

Прототип вdos.h

Замечанияintdosx вызывает программное прерывание 0x21

для вызова специальной функции DOS. Значение

inregs->h.al определяет вызываемую функцию.

intdosx, кроме того, копирует segregs->x.ds и

segregs->x.es в соответствующие регистры перед

выполнением программного прерывания. Эта осо-

бенность позволяет программам, которые исполь-

зуют дальние (far) указатели или большую модель

памяти, определить сегмент, который будет ис-

пользован во время выполнения функции.

После завершения обработки прерывания 0x21

intdosx копирует текущее значение регистров в

outregs, а флаг состояния системы - в поле

outregs x.cflag. intdosx, кроме того, восста-

навливает DS.

Если установлен флаг состояния, это значит, что

возникла ошибка.

Отметим, что inregs может указывать на ту же

структуру, что и outregs.

Возвращаемоеintdosx возвращает значение AX после

значениезавершения функции DOS. Если флаг состояния ус-

тановлен (outregs->x.cflag != 0), указывая на

ошибку, функция присваивает _doserrno код ошиб-

ки.

ПереносимостьУникальна для MS-DOS.

Смотри также bdos, bdosptr, geninterrupt, intdos, int86,

int86x, intr

-----------------------------------------------------------------

intr

-----------------------------------------------------------------

НазначениеДополнительный интерфейс программных прерываний

процессора 8086.

Синтаксис#include<dos.h>

int intr(int intr_num,struct REGPACK *preg);

Прототип вdos.h

ЗамечанияФункция intr - это альтернативный интерфейс для

выполнения программных прерываний. Она вызывает

программное прерывание процессора 8086, указан-

ное в аргументе intr_num.

intr копирует значения регистров из стуктуры

REGPACK в регистры перед выполнением программ-

ного прерывания. После обработки программного

прерывания intr копирует текущие значения ре-

гистров в preg, включая флаги состояний.

Функции intr передаются следующие аргументы:

intr_num - номер прерывания;

preg - адрес структуры, содержащей:

(а) входные регистры перед пре-

рыванием;

(б) значения регистров после

прерывания.

Структура REGPACK (описанная в dos.h) имеет

следующий вид:

struct REGPACK {

unsigned r_ax, r_bx, r_cx, r_dx;

unsigned r_bp, r_si, r_di, r_ds, r_es,

r_flags;

};

ВозвращаемоеНикакого значения не возвращается. Структура

значениеpreg содержит значения регистров после выполне-

ния прерывания.

Переносимостьintr уникальна для процессоров семейства 8086.

Смотри также geninterrupt, int86, int86x, intdos, intdosx

-----------------------------------------------------------------

ioctl

-----------------------------------------------------------------

НазначениеУправляет устройствами ввода-вывода.

Синтаксис int ioctl(int handle, int cmd[, void *argdx,

int argcx]);

Прототип вio.h

ЗамечанияЭто прямой интерфейс к системному вызову 0х44

(IOCTL).

Выполняемая функция зависит от значения cmd

следующим образом:

0- Получить информацию об устройстве;

1- Установить информацию об устройстве (в

argdx);

2- Прочитать argcx байт и поместить их по ад-

ресу, на который указывает argdx;

3- Записать argcx байт, находящихся по адресу

argdx;

4- То же, что и 2, за исключением того, что

handle трактуется, как номер диска (0= те-

кущий, 1= А и т.д.);

5- То же, что и 3, за исключением того, что

handle трактуется, как номер диска (0= те-

кущий, 1= А и т.д.);

6- Получить состояние ввода;

7- Получить состояние вывода;

8- Проверить сменяемость (только для DOS 3.х)

11- Запустить счетчик попыток перезапуска при

конфликте (только для DOS 3.0).

ioctl может использоватся для получения инфор-

мации о каналах устройств. Кроме того, могут

использоваться регулярные файлы, но для них оп-

ределены только значения cmd 0, 6, и 7.

Все остальные вызовы возвращают ошибку EINVAL

для файлов.

Для получения более полной информации об аргу-

ментах и возвращаемых значениях необходимо об-

ратиться к документации по системному вызову

0х44 в Руководстве программиста MS-DOS.

Параметры argcx и argdx необязательны.

ioctl обеспечивает прямой интерфейс с драйвера-

ми устройств DOS для специальных функций. В ре-

зультате точное поведение этих функций будет

различаться в зависимости от оборудования. Кро-

ме того, некоторые устройства не следуют интер-

фейсу, описанному здесь. Для точного использо-

вания ioctl читайте документацию по BIOS.

ВозвращаемоеДля cmd 0 или 1 возвращаемым значением будет

значениеинформация об устройстве (DX в вызове IOCTL).

Для cmd, равного от 2-х до 5, возвращается чис-

ло переданных байт.

Для cmd 6 и 7 возвращается состояние устройс-

тва.

В любом случае, если обнаружена ошибка, возвра-

щается значение -1, и errno присваивается сле-

дующее значение:

EINVAL - неверный аргумент

EBADF - неверен номер файла

EINVDAT - ошибочные данные.

Переносимостьioctl доступен на системах UNIX, но не с этими

параметрами или возможностями. UNIX.7 и System

III отличаются по своему использованию ioctl.

Вызовы ioctl не переносимы для UNIX и редко

переносимы среди машин MS-DOS.

DOS 3.0 расширяет ioctl значениями входных па-

рамиетров 8 и 11.

Пример

#include<stdio.h>

#include<io.h>

#include<dir.h>

main()

{

int stat;

/* Используется функция 8 для определения,

сменяемо ли текущее устройство */

stat = ioctl(0, 8, 0, 0);

printf("Устройство %c изменяемо? %s \n",

getdisk() + 'A', (stat == 0) ? "ДА":"НЕТ");

}

Результат выполнения программы

Устройство C изменяемо? НЕТ

-----------------------------------------------------------------