execl, execlp, execle, execv, execvp - выполняют файл
НАЗВАНИЕexecl, execlp, execle, execv, execvp - выполняют файл
СИНТАКСИС
#include
extern char **environ;
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg , ..., char *
const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
ОПИСАНИЕ
Семейство функций exec заменяет текущий образ процесса
новым образом процесса. Функции, описанные на этой
странице руководства, являются образом функции execve(2).
Более детальную информацию о смене текущего процесса можно
получить со страниц руководства, описывающих функции
execve.
Начальным параметром этих функций будет являться полное
имя файла, который необходимо исполнить.
Параметр const char *arg и аналогичные записи в функциях
execl, execlp, и execle подразумевают параметры arg0,
arg1, ..., argn. Все вместе они описывают один или
нескольких указателей на строки, заканчивающиеся NULL,
которые представляют собой список параметров, доступных
исполняемой программе. Первый параметр, по соглашению,
должен указывать на имя, ассоциированное с файлом, который
надо исполнить. Список параметров должен заканчиваться
NULL.
Функции execv и execvp предоставляют процессу массив
указателей на строки, заканчивающиеся null. Эти строки
являются списком параметров, доступных новой программе.
Первый аргумент, по соглашению, должен указать на имя,
ассоциированное с файлом, который необходимо исполнить.
Массив указателей должен заканчиваться NULL.
Функция execle также определяет окружение исполняемого
процесса, помещая после указателя NULL, заканчивающего
список параметров (или после указателя на массив), argv
дополнительного параметра. Этот дополнительный параметр
является массивом уазателей на строки, завершаемые null, и
должен заканчиваться указателем NULL. Другие функции
извлекают окружение нового образа процесса из внешней
переменной environ текущего процесса.
Некоторые из этих функций имеют особую семантику.
Функции execlp и execvp дублируют действия оболочки,
относящиеся к поиску исполняемого файла, если указанное
имя файла не содержит символ черты (/). Путь поиска
определяется в окружении переменной PATH . Если эта
переменная не определена, то используется путь поиска
":/bin:/usr/bin" по умолчанию. Дополнительно
обрабатываются некоторые ошибки.
Если запрещен доступ к файлу (при попытке исполнения
execve была возвращена ошибка EACCES), то эти функции
будут продолжать поиск вдоль оставшегося пути. Если не
найдено больше никаких файлов, то по возвращении они
установят значение глобальной переменной errno равным EAC-
CES.
Если заголовок файла не распознается (при попытке
выполнения функции execve была возвращена ошибка ENOEXEC),
то эти функции запустят оболочку (shell) с полным именем
файла в качестве первого параметра. (Если и эта попытка
будет неудачна, то дальнейший поиск не производится.)
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Возвращение значения какой-либо из функций exec приведет к
ошибке. При этом возвращаемым значением будет -1 и
глобальной переменной errno будет присвоен код
соответствующей ошибки.
ФАЙЛЫ
/bin/sh
КОДЫ ОШИБОК
Все эти функции при ошибках присваивают значение errno,
определенное в библиотечной функции execve(2).
СОВМЕСТИМОСТЬ
В некоторых других системах путь поиска по умолчанию
(используемый, когда в окружении нет переменной PATH)
начинается с каталогов /bin и /usr/bin, и только затем
поиск проводится в текущем каталоге. Это мера против
вирусов типа "троянский конь". Linux использует
традиционный метод поиска: поиск с текущего каталога.
Поведение функций execlp и execvp при ошибках во время
попыток исполнения файла сложилось исторически, но при
этом не описанно и не определено в стандарте POSIX. BSD
(и, возможно, другие системы) выполняют системное ожидание
и повтор в случае встретившейся ошибки ETXTBSY. Linux
воспринимает это как серьезную ошибку и немедленно ее
возвращает.
Обычно функции execlp и execvp игнорируют все ошибки за
исключением тех, что описаны выше, а также ENOMEM и E2BIG,
которые возвращаются в данные функции. Эти ошибки
возвращаются также при возникновении ошибок, отличающихся
от описанных выше.
СООТВЕТСТВИЕ СТАНДАРТАМ
execl, execv, execle, execlp и execvp соответствуют
стандарту IEEE Std1003.1-88 (``POSIX.1'').