Системное программирование в UNIX средствами Free Pascal


         

Для семейства вызовов linuxexecl аргументы


uses stdio;
(* Для семейства вызовов linuxexecl аргументы должны быть списком,
   заканчивающимся NULL *)
function linuxexecl(path:pchar;arg0:pchar;argv:array of const):integer;
function linuxexeclp(fname:pchar;arg0:pchar;argv:array of const):integer;
(* Вызову execl нужно передать полный путь к файлу программы *)
Procedure Execl(Path:pathstr);
(* Вызову execle нужно передать полный путь к файлу программы
   и массив указателей на строки окружения *)
Procedure Execle(Path:pathstr; Envp:ppchar);
(* Вызову ехесlp нужно только имя файла программы *)
Procedure Execlp(Path:pathstr);
(* Семейству вызовов execv нужно передать массив аргументов *)
(* Вызову execv нужно передать полный путь к файлу программы *)
Procedure Execv(Path:pathstr;argv:ppchar);
(* Вызову execvp нужно только имя файла программы *)
Procedure Execvp(Path:pathstr;argv:ppchar);
(* Вызову execve нужно передать полный путь к файлу программы
   и массив указателей на строки окружения *)
Procedure Execve(Path:pchar;argv:ppchar;envp:ppchar);
Procedure Execve(Path:pathstr;argv,envp:ppchar);



























execl

execle

execlp

v


v

execv


execvp





execve


Рис. 5.2. Дерево семейства вызовов ехес
Все множество системных вызовов ехес выполняет одну и ту же функцию: они преобразуют вызывающий процесс, загружая новую программу в его пространство памяти. Если вызов ехес завершился успешно, то вызывающая программ полностью замещается новой программой, которая запускается с начала. Результат вызова можно рассматривать как запуск нового процесса, который при этом сохраняет идентификатор вызывающего процесса и по умолчанию наследует файловые дескрипторы (см. пункт 5.5.2).
Важно отметить, что вызов ехес не создает новый подпроцесс, который выполняется одновременно с вызывающим, а вместо этого новая программа загружается на место старой. Поэтому, в отличие от вызова fork, успешный вызов ехеc не возвращает значения.

Содержание  Назад  Вперед