Выполнить файл
#include <process.h>int execlpe( const char *file,const char *arg0,const char *arg1,...const char *argn,NULL,const char *envp[] );
PATH
.NULL
. Эти строки составляют список аргументов, доступных для образа нового процесса. Необходимо, чтобы этот список был завершен указателем на NULL
. Аргумент arg0 должен указывать на имя файла, связанного с запускаемым процессом.NULL
. Эти строки представляют собой окружение для образа нового процесса. Массив envp завершается указателем на NULL
.libc
Функция execlpe() заменяет образ текущего процесса на образ нового процесса, определенного в file. Новый образ создается из обычного исполняемого файла, называемого файлом образа нового процесса. Возврата не происходит, поскольку образ вызывающего процесса заменяется образом нового процесса.
Если новый дочерний процесс является консольным скриптом, первая его строка должна начинаться с #!, за которыми следует путь к программе интерпретатора скрипта, за которым может следовать опциональный аргумент. Скрипт также должен быть помечен как исполняемый. |
Функция execlpe() использует пути, перечисленные в переменной окружения PATH
, для определения местонахождения программы, которая должна быть загружена, при соблюдении следующих условий:
PATH
. PATH
не определена, используется текущая рабочая директория. Процесс запускается с аргументами, определенными завершающимися NULL
аргументами arg1, ..., argn. arg0 должен быть указателем на имя файла, ассоциированное с программой, которая будет загружена. Только arg0 обязателен, arg1, ..., argn опциолнальны.
Окружение нового процесса определяется 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(), execv(), execve(), execvp(), execvpe(), _exit(), exit(), getenv(), main(), putenv(), spawn(), spawnl(), spawnle(), spawnlp(), spawnlpe(), spawnp(), spawnv(), spawnve(), spawnvp(), spawnvpe(), system()
Предыдущий раздел: Описание API системной библиотеки