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); }