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 | Недостаточно свободной памяти для загрузки процесса-потомка |