Процедура printpos просто выводит текущее
case pid of
1: (* ошибка *)
fatal ('Ошибка вызова fork ');
0: (* потомок *)
begin
printpos ('Дочерний процесс до чтения', fd);
fdread (fd, buf, 10);
printpos ('Дочерний процесс после чтения', fd);
end;
else (* родитель *)
begin
wait(nil);
printpos ('Родительский процесс после ожидания', fd);
end;
end;
end.
Процедура printpos просто выводит текущее положение в файле, а также короткое сообщение. Ее можно реализовать следующим образом:
(* Вывести положение в файле *)
procedure printpos(_string:pchar;filedes:integer);
var
pos:longint;
begin
pos := fdseek (filedes, 0, SEEK_CUR);
if pos=-1 then
fatal ('Ошибка вызова lseek');
writeln(_string,':',pos);
end;
После запуска этого примера получены результаты, которые убедительно подтверждают то, что указатель чтения-записи совместно используется обоими процессами:
До вызова fork:10
Дочерний процесс до чтения:10
Дочерний процесс после чтения:20
Родительский процесс после ожидания:20
Упражнение 5.5. Напишите программу, показывающую, что значения переменных программы в родительском и дочернем процессах первоначально совпадают, но не зависят друг от друга.
Упражнение 5.6. Определите, что происходит в родительском процессе, если дочерний процесс закрывает файл, дескриптор которого он унаследовал после ветвления. Другими словами, останется ли файл открытым в родительском процессе или же будет закрыт?
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий