Программирование на C и C++

Онлайн справочник программиста на C и C++

execl, execle, execlp, execlpe, execv, execve, execvp, execvpe

int execl(char *fname, char *arg0, ..., char *argN, NULL)

int execle(char *fname, char *arg0, ..., char *argN, NULL, char *envp[ ])

int execlp(char *fname, char *arg0, ..., char *argN, NULL)

int execlpe(char *fname, char *arg0, ..., char *argN, NULL, char *envp[ ])

int execv(char *fname, char *arg[ ])

int execve(char *fname, char *arg[ ], char *envp[ ])

int execvp(char *fname, char *arg[ ])

int execvpe(char *fname, char *arg[ ], char *envp[ ])

Прототип: 
Описание: 

Эти функции не определены стандартом ANSI С.

Группа функций exec используется для выполнения другой программы. Эта другая программа, называемая процессом-потомком (child process), загружается поверх программы, содержащей вызов exec. Имя файла, содержащего процесс-потомок, задано с помощью параметра fname. Какие-либо аргументы, передаваемые процессу-потомку, задаются либо с помощью параметров от arg0 до argN, либо с помощью массива arg[]. Параметр envp[] должен указывать на строку окруже­ния. (Аргументы, на которые указывает argv в процессе-потомке.)

Если fname не содержит расширения или точки, то поиск сначала производится по имени файла. При неудаче добавляется расширение ЕХЕ и поиск повторяется. При неудаче использует­ся расширение СОМ и поиск опять повторяется. Если же расширение указывается, то осуществля­ется поиск только на предмет точного совпадения. Наконец, если имеется точка, но расширение не указано, то поиск осуществляется по левой части имени файла.

Точный способ исполнения процесса-потомка зависит от вызываемой версии функции exec. Можно представить себе функцию exec как имеющую различные суффиксы, задающие ее опера­ции. Суффикс может состоять из одного или двух символов.

Функции, имеющие в качестве суффикса р, ищут процесс-потомок в каталогах, заданных коман­дой PATH. Если же суффикс р отсутствует, то поиск осуществляется только в текущем каталоге.

Если задан суффикс l, то значит, аргументы передаются процессу-потомку индивидуально, а не массивом. Этот метод используется при передаче фиксированного числа аргументов. Следует обратить внимание, что последний аргумент должен быть NULL. (NULL определен в stdio.h.)

Суффикс v означает, что аргументы передаются процессу-потомку в массиве. Этот способ ис­пользуется тогда, когда заранее не известно, сколько аргументов будет передано процессу-потомку, либо же число аргументов может изменяться во время выполнения программы. Обычно конец массива обозначается нулевым указателем.

Суффикс е указывает, что процессу-потомку будет передана одна или более строк окружения. Параметр envp представляет собой массив указателей на строки. Каждая строка, на которую ука­зывает массив, должна иметь следующий вид: переменная_окружения = значение

Последний указатель в массиве должен быть NULL. Если же первый элемент массива является NULL, то процесс-потомок сохраняет то же самое окружение, что и процесс-предок.

Важно помнить, что файлы, открытые при вызове exec, являются также открытыми в програм­ме-потомке.

В случае успеха функция exec не возвращает значения. При неудаче возвращается значение —1, а переменная errno устанавливается равной одному из следующих значений:

МакросЗначение
EACCESSДоступ к файлу процесса-потомка запрещен
EMFILEСлишком много открытых файлов
ENOENTФайл не найден
ENOEXECНедействительный формат exec
ENOMEMНедостаточно свободной памяти для загрузки процесса-потомка
Пример: