Создать дочерний процесс с заданием списка аргументов и окружением
#include <process.h>int spawnve( int mode,const char *path,char * const argv[],char * const envp[] );
NULL
и должно представлять имя файла загружаемой программы. Последний член массива должен быть всегда равен NULL
. Сам указатель argv не может быть равен NULL
.NULL
. Формат каждой строки должен быть следующим: variable=value. Если envp равен NULL
, то дочерний процесс унаследует переменные окружения родителя.libc
Функция spawnve() создает и исполняет новый дочерний процесс на основе файла path с использованием NULL
-терминированного списка аргументов в argv.
Если новый процесс является shell-скриптом, то его первая строка должна начинаться с #! с последующим именем программы-интерпретатора (опционально могут быть также переданы его аргументы). Скрипт также должен иметь разрешения на исполнение. |
Данная функция не является частью стандарта POSIX 1003.1 и не дает гарантии одинакового исполнения во всех операционных системах. Она неявно вызовает spawn().
Перечисленные на рисунке функции в конечном счете вызывают spawn():
Если envp равно NULL
, потомок будет наследовать переменные окружения родителя. Доступ к переменным окружения в дочернем процессе осуществляется через environ.
Следующие аргументы передаются неявному вызову spawn():
0
если mode = P_WAIT
/ P_NOWAIT
SPAWN_EXEC
если mode = P_OVERLAY
SPAWN_NOZOMBIE
если mode = P_NOWAITO
0
, 0
, attr, argv, envp ).
Отношения родитель-потомок не означают, что потомок будет завершен при смерти родителя. |
Функция возвращает значение в зависимости от аргумента mode (подробнее см. на странице описания spawnl()).
Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
Функция устанавливает коды ошибок, используемые spawn(), и дополнительно:
P_WAIT
, но потомок завершился до вызова waitpid() родителем. ЗОСРВ «Нейтрино»
Если mode равно P_WAIT
, данная функция является точкой остановки потока.
execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), getenv(), putenv(), setenv(), spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnvp(), spawnvpe(), wait(), waitpid()
Предыдущий раздел: Описание API системной библиотеки