execvpe()

Выполнить файл

Прототип:

#include <process.h>
int execvpe( const char *file,
char * const argv[],
char * const envp[] );

Аргументы:

file
Используется для создания пути к файлу, идентифицирующему файл образа нового процесса. Если аргумент file содержит символ "/", то аргумент file используется как путь к файлу. В ином случае, префикс пути к файлу получается путем поиска в директориях, переданных в переменной окружения PATH.
argv
Массив указателей на строки, завершаемые NULL. Необходимо, чтобы этот массив был завершен указателем на NULL. Эти строки составляют список аргументов, доступных для образа нового процесса. Аргумент arg0 должен указывать на имя файла, связанного с запускаемым процессом.
envp
Массив символьных указателей на строки, завершаемые NULL. Эти строки представляют собой окружение для образа нового процесса. Массив envp завершается указателем на NULL.

Библиотека:

libc

Описание:


Note: Смотрите execl() для дополнительной информации о семействе функций exec*().

Функция execvpe() заменяет образ текущего процесса на образ нового процесса, определенного в file. Новый образ создается из обычного исполняемого файла, называемого файлом образа нового процесса. Возврата не происходит, поскольку образ вызывающего процесса заменяется образом нового процесса.


Note: Если новый дочерний процесс является консольным скриптом, первая его строка должна начинаться с #!, за которыми следует путь к программе интерпретатора скрипта, за которым может следовать опциональный аргумент. Скрипт также должен быть помечен как исполняемый.

Функция execvpe() использует пути, перечисленные в переменной окружения 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.

Коды ошибок:

E2BIG
Список аргументов и переменных среды больше, чем установленный системный предел в ARG_MAX байтов.
EACCESS
Вызывающий процесс не имеет разрешения для поиска директории, описанной в file, либо разрешения на выполнение file, либо файловая система, содержащая file, смонтирована с флагом ST_NOEXEC.
ELOOP
Слишком много уровней символических ссылок или префиксов.
ENAMETOOLONG
Длина file или элемента переменной окружения PATH превышает PATH_MAX.
ENOENT
Один или более компонентов пути к файлу не существует, либо аргумент file указывает на пустую строку.
ENOMEM
Недостаточно памяти для создания нового процесса.
ENOTDIR
Часть file не является директорией.
ETXTBSY
Текстовый файл, который планируется выполнить, занят (например, он может быть открыт для записи).

Классификация:

ЗОСРВ «Нейтрино»

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

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 системной библиотеки