CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по библиотечным функциям языка Си
execl - execvp - запустить процесс
Описание
exec - функции создают и выполняют новый порожденный
процесс. Успешное выполнение exec вызывает замену в
памяти родительского процесса на порожденный процесс,
для которого должно быть достаточно памяти. Exec пере-
записывает новую программу на место текущей и начинает
исполнение. Name специфицирует эту программу. Если эта
спецификация не содержит описания пути доступа к фай-
лу программы и файл не содержится в текущем каталоге,
то в случае execvp и execlp для поиска файла использу-
ется переменная окружения PATH. Параметры обращения к
подпроцессу образуются из строк литер, заданных в об-
ращении к exec. Они образуют список аргументов, сово-
купная длина которых, исключая arg0, не должна превы-
шать 128 символов. Аргумент arg0 игнорируется. Он вклю-
чен по соображениям совместимости. Аргумент argv, ис-
пользуемый в execv и execvp, является массивом указа-
телей на строки. Последний указатель в argv должен
быть NULL.
Использование
#include <process.h>
#include <errno.h> /* Только для контроля ошибок */
int execl(char * name, char *arg0, *arg1,..., *argn,
NULL);
int execv(char * name, char *argv[]);
int execlp(char * name, char *arg0, *arg1,..., *argn,
NULL);
int execvp(char * name, char *argv[]);
Возвращаемое значение
В случае успешного обращения exec не возвращает управ-
ления. В случае ошибки возвращает значение -1. Внешняя
переменная errno будет установлена в значение, иденти-
фицирующее ошибку. Эти значения декларированы в файле
errno.h:
E2BIG - Список аргументов превышает 128 байт.
ENOENT - Не найден файл.
Пример
#include <process.h>
#include <errno.h>
#include <stdio.h>
main(int argc, char * argv[])
{
char *args[4];
int result;
arg[0] = "arg0";
arg[1] = "arg1";
arg[2] = "arg2";
arg[3] = "arg3";
switch (argv[1][0])
{
case `1':
execl("myprog.exe", "arg0", "arg1", "arg2",
"arg3",NULL);
break;
case `2':
execlp("myprog.exe", "arg0", "arg1", "arg2",
"arg3", NULL);
break;
case `3':
execv("myprog.exe", "args");
break;
case `4':
execvp("myprog.exe", "args");
break;
default:
printf("Введите число между 1 и 4 в командной
строке\n");
exit(1);
}
printf("Процесс myprog.exe не исполнен.\n");
}
Рекомендация
Смотрите также abort, exit, spawn, system.
