Создать дочерний процесс с заданным списком аргументов и окружением
#include <process.h>int spawnle( int mode,const char *path,const char *arg0,const char *arg1,...,const char *argn,NULL,const char *envp[] );
NULL
недопустимо). Список аргументов должен завершаться NULL
.NULL
. Формат каждой строки должен быть следующим: variable=value. Если envp равен NULL
, то дочерний процесс унаследует переменные окружения родителя.libc
Функция spawnle() создает и исполняет новый дочерний процесс на основе файла path с использованием NULL
-терминированного списка аргументов в arg0 ... argn и установкой переменных окружения в соответствии с envp. Функция неявно вызывает spawnve().
Если новый процесс является shell-скриптом, то его первая строка должна начинаться с #! с последующим именем программы-интерпретатора (опционально могут быть также переданы его аргументы). Скрипт также должен иметь разрешения на исполнение. |
Данная функция не является частью стандарта POSIX 1003.1 и не дает гарантии одинакового исполнения во всех операционных системах. Она формирует массивы argv[] и envp[] перед неявным вызовом spawn().
Перечисленные на рисунке функции в конечном счете вызывают spawn():
Аргументы передаются дочернему процессу путем передачи одного или нескольких указателей на соответствующие строки. При передаче потомку они объединяются, но каждый аргумент разделяется пробелом.
Если envp равно NULL
, потомок будет наследовать переменные окружения родителя. Доступ к переменным окружения в дочернем процессе осуществляется через environ.
Отношения родитель-потомок не означают, что потомок будет завершен при смерти родителя. |
Функция возвращает значение в зависимости от аргумента mode (подробнее см. на странице описания spawnl()).
Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
Функция устанавливает коды ошибок, используемые spawn(), и дополнительно:
P_WAIT
, но потомок завершился до вызова waitpid() родителем. Исполнение команды:
myprog ARG1 ARG2
в исходном коде выполняется следующим образом:
#include <stddef.h>#include <process.h>char *env_list[] = {"SOURCE=MYDATA","TARGET=OUTPUT","lines=65",NULL};spawnle( P_WAIT, "myprog", "myprog", "ARG1", "ARG2", NULL, env_list );
Программа myprog будет найдена в том случае, если она размещена в текущей директории. Окружение потомка будет содержать три переменные: SOURCE
, TARGET
и lines
.
ЗОСРВ «Нейтрино»
Если mode равно P_WAIT
, данная функция является точкой остановки потока.
execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), getenv(), putenv(), setenv(), spawn(), spawnl(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe(), wait(), waitpid()
Предыдущий раздел: Описание API системной библиотеки