Справочник по функциям С++. Подпрограммы классификации Подпрограммы преобразования
Скачать 3.41 Mb.
|
enable----------------------------------------------------------------- Назначение Включение прерываний. Синтаксис #include void enable(void); Замечания enable предназначен для предоставления прог- раммисту возможности гибкого управления преры- ваниями. Макрос enable включает обработку прерываний внешних устройств. Возвращаемое Нет. значение Переносимость Этот макрос предназначены только для процессора 8086. Смотри также disable, getvect ----------------------------------------------------------------- eof----------------------------------------------------------------- Назначение Контролирует достижение конца файла. Синтаксис int eof(int handle); Прототип в io.h Замечания eof определяет достигнут ли конец файла, свя- занного с дескриптором handle. Возвращаемое Если текущая позиция - конец файла, то eof значение возвращает 1, иначе возвращается 0. Возвращаемое значение (-1) указывает на ошибку, и errno устанавливается в EBADF - неверный номер файла Смотри также cleaerr, feof, ferror, perror ----------------------------------------------------------------- exec...----------------------------------------------------------------- Назначение Загружает и выполняет программы. Синтаксис int execl(char *pathname, char *arg0, *arg1,..., *argn, NULL ); int execle(char *pathname, char *arg0, *arg1,..., *argn, NULL, char **envp); int execlp(char *pathname, char *arg0, *arg1,..., *argn, NULL ); int execlpe(char *pathname, char *arg0, *arg1,..., *argn, NULL, char **envp); int execv(char *pathname, char *arg[]); int execve(char *pathname, char *arg[], char **envp); int execvp(char *pathname, char *arg[]); int execvpe(char *pathname, char *arg[], char **envp); Прототип в process.h Замечания Функции exec...- семейства загружают и выполня- ют другие программы, называемые процессами-по- томками. Когда вызов exec... успешен, про- цесс-потомок размещается с процессом-родителем оверлейно. Поэтому должно быть достаточное ко- личество свободной памяти для загрузки и выпол- нения процесса-потомка. pathname - маршрут доступа к файлу, вызванного процесса-потомка. Функции exec... производят поиск для pathname, используя стандартный алго- ритм поиска MS-DOS: # Если расширение явно не задано (например pathname = MYPROG), то сперва ищется файл без расширения. Если такой файл не найден, то к его имени добавляется .COM, и поиск выполня- ется снова. Если поиск вновь неудачен, то он повторяется последний раз, но с расширением .EXE. # Если явно заданы расширение или точка (напри- мер, pathname = MYPROG.EXE), то поиск выпол- няется только для заданного имени файла. Суффиксы l, v, p и e добавляются к именам функ- ций exec...-семейства для того, чтобы опреде- лить конкретные возможности функции. p Указывает, что функция будет искать процесс - потомок в каталогах, заданных переменной сре- ды DOS PATH. Без суффикса p производится по- иск только в корневом и текущем каталоге. Ес- ли в параметре pathname не указан каталог, то вначале просматривается текущий каталог, а затем каталоги, заданные переменной среды DOS. l Указывает, что указатели аргументов (arg0, arg1, ..., argn) пересылаются как отдельные аргументы. Суффикс l обычно используется в тех случаях, когда вы знаете наперед число пересылаемых аргументов. v Указывает, что указатели аргументов (arg[0], arg[1],..., arg[n]) пересылаются как массив указателей. Обычно суффикс v используется в тех случаях, когда пересылается переменное число аргументов. e Указывает, что аргумент envp может быть пос- лан процессу-потомку, что позволяет изменить его среду. Без суффикса e процесс-потомок наследует среду процесса-родителя. Каждая функция в семействе exec... должна иметь один из двух суффиксов (либо l, либо v). Суф- фиксы поиска маршрута и наследования среды (p и e) необязательны. Например: * exec...-функция execl берет аргументы раз- дельно, проводит поиск только в корневом и текущем каталоге для процесса-потомка и пе- ресылает среду процесса-родителя процессу- потомку. * exec...-функция execvpe берет массив аргу- ментов указателей, включает PATH в свой по- иск процесса-потомка и принимает аргумент envp для изменения среды процесса-потомка. Функции exec... должны пересылать по крайней мере один аргумент процессу-потомку (arg0 или arg[0]). Этот аргумент, по соглашению - копия pathname. (Использование различных значений для этого аргумента не вызывает ошибок). В MS-DOS 3.x pathname доступен процессу-потом- ку; в более ранних версиях процесс-потомок не может использовать посланное нулевым аргументом (arg0 или arg[0]) значение. Если используется суффикс l, то arg0 обычно указывает на pathname, а arg1, ..., argn указы- вают на символьные строки, которые образуют но- вый список аргументов. Обязательный NULL следу- ет за argn, отмечая конец списка. Если используется суффикс e, то вы посылаете список новых установок среды с помощью аргумен- та envp. Этот аргумент среды представляет собой массив строк (char*). Каждый элемент указывает на NULL-оканчивающуюся строку символов вида envar = value, где envar - имя переменной среды, а value - строка, значение которой определяет новую сре- ду. Последним элементом в envp является NULL. Когда envp равен NULL, процесс-потомок наследу- ет среду процесса-родителя. Общая длина arg0 + arg1 +...+ argn (или arg[0]+ arg[1]+ ...+ arg[n]), включая пробелы, разделя- ющие аргументы, должна быть меньше 128 байт. NULL-ограничители не учитываются. Когда функция exec... вызывается, все открытые файлы остаются открытыми в процессе-потомке. Возвращаемое При успешном вызове exec...-функции не возвра- значение возвращают значений. При ошибке возвращается (-1), и errno устанавливается в одно из следую- щих значений: E2BIG - список аргументов слишком длинен EACCES - ошибка доступа EMFILE - слишком много открытых файлов ENOENT - маршрут или имя файла не найдены ENOEXEC - ошибка в формате exec ENOMEM - недостаточно памяти Переносимость exec... уникальна для MS-DOS. Смотри также abort, atexit, _exit, exit, _fpreset, searchpath, spawn..., system Пример #include #include main() { int stat; printf("Вызов процесса-потомка с аргументами" " arg1 arg2 ...\n"); stat =execl("CHILD.EXE", "CHILD.EXE", "arg1", "arg2", NULL) ; /* execl завершится, если не запустит CHILD*/ printf("ошибка execl = %d\n", stat); exit(1); } /* CHILD.C */ #include main(int argc, char *argv[]) { int i; printf("Процесс-потомок запущен... \n"); /* Распечатать аргументы */ for (i=0; i printf("argv[%d]: %s\n", 1, argv[i]); } Результат выполнения программы Вызов процесса-потомка c аргументами arg1 arg2 ... Процесс-потомок запущен... arg[0]: CHILD.EXE arg[1]: arg1 arg[2]: arg2 ----------------------------------------------------------------- |