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

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<stdio.h>

#include<process.h>

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<stdio.h>

main(int argc, char *argv[])

{

int i;

printf("Процесс-потомок запущен... \n");

/* Распечатать аргументы */

for (i=0; i<argc; i++)

printf("argv[%d]: %s\n", 1, argv[i]);

}

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

Вызов процесса-потомка c аргументами arg1 arg2 ...

Процесс-потомок запущен...

arg[0]: CHILD.EXE

arg[1]: arg1

arg[2]: arg2

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

_exit

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

НазначениеЗавершение процесса.

Синтаксисvoid _exit(int status);

Прототип вprocess.h, stdlib.h

Замечания_exit завершает процесс без закрытия файлов,

очистки вывода или вызова функции выхода.

status используется для вызываемого процесса

как статус окончания процесса. Обычно использу-

ется 0 для указания нормального завершения, не-

нулевое значение указывает на некоторую ошибку.

ВозвращаемоеНет.

значение

Переносимость_exit доступна в системах UNIX.

Смотри также abort, atexit, exec..., exit, spawn...

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

exit

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

НазначениеЗавершение процесса.

Синтаксисvoid exit(int status);

Прототип вprocess.h, stdlib.h

Замечанияexit завершает вызванный процесс. Перед завер-

шением закрываются все файлы, записывается бу-

фер вывода (ожидающий вывода), а затем вызыва-

ются любые регистровые функции и функции

завершения (посланные atexit).

status используется для вызываемого процесса

как статус окончания процесса. Обычно использу-

ется 0 для указания нормального завершения, не-

нулевое значение указывает на некоторую ошибку.

ВозвращаемоеНет.

значение

Переносимостьexit доступна в системах UNIX и совместима с

ANSI Си.

Смотри также abort, atexit, exec..., _exit, keep, signal,

spawn...

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

exp

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

НазначениеОпределение экспоненты.

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

double exp(double x);

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

Замечанияexp - вычисляет экспоненциальную функцию e**x.

Возвращаемоеexp возвращает е**х.

значение

Иногда аргумент, посылаемый функции exp, дает

результат, который переполняет разрядную сетку

или невычисляем. Когда корректное значение па-

раметра х вызывает переполнение, exp возвращает

значениe HUDE_VAL, переменная errno устанавли-

вается в

ERANGE - результат вне границ

При получении очень малых значений (underflow)

exp возвращает 0.0, errno не изменяется.

Обработка ошибок для функции ехр может быть мо-

дифицирована с помощью функции matherr.

Переносимостьexp доступна в системах UNIX и совместима с

ANSI Си.

Cмотри также frexp, ldexp, log, log10, matherr, pow,

pow10, sqrt

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

fabs

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

НазначениеОпределение абсолютного значения вещественного

аргумента.

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

double fabs(double x);

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

Замечанияfabs возвращает абсолютное значение вeществен-

ного аргумента х.

Возвращаемоеfabs возвращает абсолютное значение входного

значениеаргумента.

ПереносимостьДоступна в операционной системе UNIX и совмес-

тима с ANSI Си.

Смотри такжеabs, cabs, labs

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