Выполнить файл
#include <process.h>int execvpe( const char *file,char * const argv[],char * const envp[] );
PATH
.NULL
. Необходимо, чтобы этот массив был завершен указателем на NULL
. Эти строки составляют список аргументов, доступных для образа нового процесса. Аргумент arg0 должен указывать на имя файла, связанного с запускаемым процессом.NULL
. Эти строки представляют собой окружение для образа нового процесса. Массив envp завершается указателем на NULL
.libc
Функция execvpe() заменяет образ текущего процесса на образ нового процесса, определенного в file. Новый образ создается из обычного исполняемого файла, называемого файлом образа нового процесса. Возврата не происходит, поскольку образ вызывающего процесса заменяется образом нового процесса.
![]() | Если новый дочерний процесс является консольным скриптом, первая его строка должна начинаться с #!, за которыми следует путь к программе интерпретатора скрипта, за которым может следовать опциональный аргумент. Скрипт также должен быть помечен как исполняемый. |
Функция execvpe() использует пути, перечисленные в переменной окружения PATH
, для определения местонахождения программы, которая должна быть загружена, при соблюдении следующих условий:
PATH
. PATH
не определена, используется текущая рабочая директория. Процесс запускается с аргументами, определенными завершающимися NULL
аргументами arg1, ..., argn. arg0 должен быть указателем на имя файла, ассоциированное с программой, которая будет загружена. Только arg0 обязателен, arg1, ..., argn опциолнальны. Процесс запускается с аругментами, определяемыми argv, массивом завершаемых NULL
строк; массив также должен завершаться NULL
. argv[0] должен быть указателем на имя файла, ассоциированное с программой, которая будет загружена. Аргумент argv не может быть равным NULL
, но argv[0] может быть равен NULL
, если аргументов не требуется.
Окружение нового процесса определяется envp, массивом, завершаемым NULL
и состоящим из строк, завершаемых NULL
. envp не может иметь значение NULL
, но envp[0] может быть указателем на NULL
, если никаких строк окружения не передается.
Каждый указатель в envp указывает на строку вида:
variable=value
которая используется для определения переменной окружения.
Окружение - совокупность переменных окружения, чьи значения были определены с помощью команды оболочки export, утилиты env или с помощью успешного выполнения функций putenv() или setenv(). Программа может считать эти значения с помощью функции getenv().
Если программа не найдена, возникает ошибка.
Если file находится на файловой системе, смонтированной с установленным флагом ST_NOSUID, эффективный идентификатор пользователя, эффективный идентификатор группы, сохраненный идентификатор пользователя и сохраненный идентификатор группы остаются неизменными для нового процесса. В ином случае, если установлен бит режима идентификатора пользователя, эффективный идентификатор пользователя образа нового процесса устанавливается в идентификатор пользователя file. Аналогично, если установлен бит режима идентификатора группы, эффективный идентификатор группы устанавливается в идентификатор группы file. Идентификатор фактического пользователя, идентификатор фактической группы и идентификаторы дополнительных групп нового процесса остаются такими же, как и у вызывающего процесса. Эффективный идентификатор пользователя и эффективный идентификатор группы образа нового процесса сохраняются (как сохраненный идентификатор пользователя и сохраненный идентификатор группы, используемые setuid()).
Если вызывающий процесс заблокировал некоторый сегмент памяти, блокировки снимаются.
Коротко об exec*()
Функция | Описание | POSIX-совместимая? |
---|---|---|
execl() | Список аргументов, завершаемый NULL | Да |
execle() | Список аргументов, завершаемый NULL , определение окружения нового процесса | Да |
execlp() | Список аргументов, завершаемый NULL , поиск нового процесса проходит в PATH | Да |
execlpe() | Список аргументов, завершаемый NULL , определение окружения нового процесса, поиск нового процесса проходит в PATH | Нет |
execv() | Список аргументов, завершаемый NULL | Да |
execve() | Список аргументов, завершаемый NULL , определение окружения нового процесса | Да |
execvp() | Список аргументов, завершаемый NULL , поиск нового процесса проходит в PATH | Да |
execvpe() | Список аргументов, завершаемый NULL , определение окружения нового процесса, поиск нового процесса проходит в PATH | Нет |
При успешном завершении функция не возвращает управление; если возникла ошибка, функция возвращает -1
, код ошибки записывается в errno.
ARG_MAX
байт. PATH
превышает PATH_MAX
. ЗОСРВ «Нейтрино»
abort(), atexit(), errno, execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), _exit(), exit(), getenv(), main(), putenv(), spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe(), system()
Предыдущий раздел: Описание API системной библиотеки