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