Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 25 из 715

Операция execl загружает файл „copy“, который предположительно находится в текущем каталоге, в адресное пространство порожденного процесса и запускает программу с параметрами, полученными от пользователя. В случае успешного выполнения операции execl управление в вызвавший ее процесс не возвращается, поскольку процесс выполняется в новом адресном пространстве (подробнее об этом в главе 7). Тем временем, процесс, запустивший операцию fork (родительский процесс), получает ненулевое значение кода завершения операции, вызывает операцию wait, которая приостанавливает его выполнение до тех пор, пока не закончится выполнение программы copy, и завершается (каждая программа имеет выход в конце главной процедуры, после которой располагаются программы стандартных библиотек Си, подключаемые в процессе компиляции). Например, если исполняемая программа называется run, пользователь запускает ее следующим образом:

run oldfile newfile

Процесс выполняет копирование файла с именем „oldfile“ в файл с именем „newfile“ и выводит сообщение. Хотя данная программа мало что добавила к программе „copy“, в ней появились четыре основных обращения к операционной системе, управляющие выполнением процессов: fork, exec, wait и exit.

main(argc, argv)

int argc;

char *argv[];

{ /* предусмотрено 2 аргумента: исходный файл и новый файл */

 if (fork() == 0) execl("copy", "copy", argv[1], argv[2], 0);

 wait((int *)0);

 printf("copy done\n");

}

Рисунок 1.4.

|< Пред. 23 24 25 26 27 След. >|

Java книги

Контакты: [email protected]