Книга: Программирование для Linux. Профессиональный подход
Семейство функций exec()
Семейство функций exec()
Функции семейства exec()
заменяют программу, выполняющуюся в текущем процессе, другой программой. Когда программа вызывает функцию exec()
, ее выполнение немедленно прекращается и начинает работу новая программа.
Функции, входящие в семейство exec()
, немного отличаются друг от друга по своим возможностям и способу вызова.
? Функции, в названии которых присутствует суффикс 'p'(execvp()
и execlp()
), принимают в качестве аргумента имя программы и ищут эту программу в каталогах, определяемых переменном среды PATH
. Всем остальным функциям нужно передавать полное путевое имя программы.
? Функции, в названии которых присутствует суффикс 'v'(execv()
, execvp()
и execve()
), принимают список аргументов программы в виде массива строковых указателей, оканчивающегося NULL
-указателем. Функции с суффиксом 'l'(execl()
, execlp()
и execle()
) принимают список аргументов переменного размера.
? Функции, в названии которых присутствует суффикс 'e'(execve()
и execle()
), в качестве дополнительного аргумента принимают массив переменных среды. Этот массив содержит строковые указатели и оканчивается пустым указателем. Каждая строка должна иметь вид "ПЕРЕМЕННАЯ=значение"
.
Поскольку функция exec()
заменяет одну программу другой, она никогда не возвращает значение — только если вызов программы оказался невозможен в случае ошибки.
Список аргументов, передаваемых программе, аналогичен аргументам командной строки, указываемым при запуске программы в интерактивном режиме. Их тоже можно получить с помощью параметров argc
и argv
функции main()
. Не забывайте, когда программу запускает интерпретатор команд, первый элемент массива argv будет содержать имя программы, а далее будут находиться переданные программе аргументы. Аналогичным образом следует поступить, формируя список аргументов для функции exec()
.
- 3.2.2. Функции fork() и exec()
- 8.2. Вызов функций
- 9.1.4.2. Функции-оболочки: execl() и др.
- Пересмотр функций клиента
- Вызовы функций
- 2.3 Executable and Linking Format
- 9.1.6.1. Использование функций POSIX: wait() и waitpid()
- Урок 6.4. Расчеты с использованием функций и имен ячеек
- Мастер функций
- Практическая работа 46. Выполнение расчетов с использованием Мастера функций
- Практическая работа 47. Расчеты с использованием логических функций
- 9.4.3.1. Флаг close-on-exec