CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
inp
INP
#include <conio.h> требуется только для объявления
функции
int inp(port);
unsigned port; номер порта
Описание.
Функция inp читает 1 байт из порта ввода, определенного по
port. Аргумент port может быть любым беззнаковым целым числом в
пределах от 0 до 65535.
Возвращаемое значение.
Функция inp возвращает прочитанный байт из port. Возвращае-
мого значения в случае ошибки нет.
Смотри также output.
Пример:
#include <conio.h>
unsigned port;
char result;
.
.
.
/* следующий оператор вводит тот байт из порта, на который
установлен port */
result=inp(port);
INT86
#include <dos.h>
int int86(intno,inregs,outregs);
int ntno; номер (число) прерывания зна-
union REGS *inregs; чения регистров при вызове
union REGS *outregs; значения регистров при воз-
врате
Описание.
Функция int86 выполняет прерывание 8086 программного обес-
печения, которое определено номером прерывания intno. Перед вы-
полнением прерывания int86 копирует содержимое inregs в соответс-
твующие регистры. После возврата прерывания функция копирует зна-
чение текущего регистра в outregs. Она также копирует статус пе-
реносимого флага системы в поле cflag, содержащееся в outregs.
Аргументы inregs и outregs являются объединениями типа REGS. Тип
объединения объявлен в include-файле <dos.h>. Использование функ-
ции int86 предназначено для вызовов прерываний DOS.
Возвращаемое значение.
Возвращаемым значением является значение в регистре AX пос-
ле возврата прерывания. Если поле cflag в outregs ненулевое, воз-
никает ошибка и переменная _doserrno также устанавливает соответ-
ствующий код ошибки.
Смотри также bdos, intdos, intdosx, int86x.
Пример:
#include <signal.h>
#include <dos.h>
#include <stdio.h>
#include <process.h>
/* прерывание номер 0х23, подхватываемое процедурой обра-
ботки прерываний int_handler. Замечание: Значения в структуре
regs не имеют смысла для этого прерывания. */
#define CNTRL_C 0x23
int int_handler(int);
union REGS regs;
.
.
.
signal (SIGINT, int_handler);
.
.
.
int86 (CNTRL_C, ®s, ®s);
INT86X
#include <dos.h>
int int86x(intno,inregs,outregs,segregs);
int intno; номер (число) прерываний
union REGS *inregs; значение регистров при
вызове
union REGS *outregs; значение регистров при
возврате
struct SREGS *segregs; значение сегментов при
вызове
Описание.
Функция int86x выполняет прерывание 8086 программного обес-
печения, которое определено номером прерывания intno. В отличие
от функции int86, функция int86x принимает значения регистра сег-
мента в segregs, позволяя программам, использующим сегменты дан-
ных большой модели или far-указатели, определять, какой сегмент
или указатель должен быть использован в процессе системного вызо-
ва. Перед выполнением определенного прерывания int86x копирует
содержимое inregs и segregs в соответствующие регистры. В segregs
используются только значения регистров DS и ES. После возврата
прерываний функция копирует значения текущего регистра в outregs
и перезаписывает DS. Она также копирует состояние (статус) пере-
носимого флага системы в поле cflag, содержащееся в outregs. Ар-
гументы inregs и outregs являются объединениями типа REGS. Аргу-
мент segregs является структурой типа SREGS. Эти типы объявлены в
include-файле <dos.h>. Использование функции int86x предназначено
для прямого вызова прерываний DOS, которые берут аргумент в ре-
гистре ES или значение регистра DS, которое отличается от умал-
чиваемого сегмента данных.
Возвращаемое значение.
Возвращаемым значением является значение в регистре AX пос-
ле возвращения прерываний. Если поле flag в outregs является не-
нулевым, возникает ошибка и переменная _doserrno также устанавли-
вает соответствующий код ошибки.
См.также bdos, intdos, intdosx, int86, segread, FP_SEG.
Замечание! Значения сегмента для аргумента segreg могут
быть получены либо при использовании функции segread, либо макро
FP_SEG.
Пример:
#include <signal.h>
#include <dos.h>
#include <stdio.h>
#include <process.h>
/* процедура int86x используется для генерирования прерыва-
ния 0х21 (системный вызов), который, в свою очередь, активизирует
системный вызов "Изменение атрибутов" DOS. Здесь используется
процедура int86x, поскольку ссылка на имя файла может находиться
в сегменте, отличном от умалчиваемого сегмента данных (ссылка при
помощи far-указателя), поэтому регистр DS может быть точно уста-
новлен со структурой SREGS. */
#define SYSCALL 0x21
/* INT 21H вызывает системные вызовы */
#define CHANGE_ATTR 0x43
/* системный вызов 43H - изменения атрибутов */
char far *filename;
/* имя файла в far-сегменте данных */
union REGS inregs, outregs;
struct SREGS segregs;
int result;
.
.
.
inregs.h.ah=CHANGE_ATTR;
/* AH - номер (число) системного вызова */
inregs.h.al=0;
/* AL - функция вызова атрибутов */
inregs.x.dx=FP_OFF(filename);
/* DS:DX указывают на имя файла */
segregs.ds=FP_SEG(filename);
result=int86x(SYSCALL,&inregs,&outregs,&segregs);
if (outregs.x.cflag) {
printf("can't get attributes of file; error
number %d\n", result);
exit(1);
}
else {
printf("Attribs=%#x\n", outregs.x.cx);
}
