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




Описание


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 не возвращает значения.




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