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.