876_____________________________________________Глава 14

Все функции возвращают 0 при успешной загрузке порожденного процесса, а
при ошибке возвращают -1. В этом случае глобальная переменная еггпо (см. раз-
дел 14.5.1) может принимать значения EACCES — нарушение права доступа,
EMFILE — слишком много открытых файлов, ENOENT — не найден путь или
файл, ENOEXEC — ошибка формата, ENOMEM — не хватает памяти.

Приведем примеры. Оператор

iffexecl("FI.exe","FI.exe", NULL))
ShowMessage("Программа FI.exe не выполнена");

завершает текущий процесс и передает управление программе с выполняемым
файлом FI.exe. Этот файл должен быть расположен в рабочем каталоге. Иначе
функция excel вернет -1 и будет выдано сообщение функцией ShowMessage. Ана-
логичное сообщение будет выдано если, например, для загрузки FI.exe не хватает
оперативной памяти.
Оператор

execlp("nc","nc",NULL);

передает управление программе Norton Commander (файл пс.ехе), если только
путь к этой программе указан в переменной окружения PATH.
Оператор

char * prog = "command.corn";

execlp(prog,prog, NULL);

передает управление DOS, если только путь к файлу command.corn указан в пере-
менной окружения PATH.
Оператор

execlp("Winword","Winword","F.doc",NULL))

запускает редактор Word и передает в него файл F.doc.
Вызов редактора Word можно оформить иначе:

char *arg[5] = {"Winword"); // может принять до трех аргументов
arg[l] = "Fl.doc";

arg[2] = "F2.doc";

execvp(arg[0],arg) ;

В массив arg при его объявлении заносится в качестве нулевого аргумента имя
программы «Winword», а остальные четыре элемента массива по умолчанию полу-
чают значения NULL. После этого в элементы с индексами 1 и 2 заносятся имена
передаваемых в Word файлов. Следующий элемент остается прежним — NULL. В
результате функция execvp передаст управление программе Winword и загрузит в
редактор два указанных файла.

Прежде, чем рассматривать функции spawn..., обладающие широкими воз-
можностями, надо обсудить две вспомогательные функции: cwait и wait.

Функция wait обеспечивает ожидание завершения порожденного процесса
или нескольких процессов. Окончания процессов, запущенных из этих порожден-
ных процессов с вытеснением родителей функция не ждет.

Если параметр statloc функции wait не NULL, то он указывает на целое, пред-
ставляющее собой статус завершения порожденного процесса. При нормальном его
завершении биты этого целого означают следующее:

биты 0-7 Нули

биты 8-15 Старшие разряды кода возврата порожденного процесса. Это то зна-
чение, которое передает программа в функцию exit или в оператор
return функции main. Если порожденный процесс просто покинул
main без оператора return, то значение этих битов не определено