Добавил:
Mendeleev
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal / examples / 5 / proc_file
.pas (* рТПЗТБННБ proc_file -- РПЧЕДЕОЙЕ ЖБКМПЧ РТЙ ЧЕФЧМЕОЙЙ *)
(* рТЕДРПМПЦЙН, ЮФП ДМЙОБ ЖБКМБ "data" ОЕ НЕОЕЕ 20 УЙНЧПМПЧ *)
uses linux,stdio;
procedure fatal(s:pchar);
begin
perror(s);
halt(1);
end;
(* чЩЧЕУФЙ РПМПЦЕОЙЕ Ч ЖБКМЕ *)
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;
var
fd:integer;
pid:longint; (* ЙДЕОФЙЖЙЛБФПТ РТПГЕУУБ *)
buf:array [0..9] of char; (* ВХЖЕТ ДБООЩИ ДМС ЖБКМБ *)
begin
fd := fdopen ('data', Open_RDONLY);
if fd = -1 then
fatal ('пЫЙВЛБ ЧЩЪПЧБ open ');
fdread (fd, buf, 10); (* РЕТЕНЕУФЙФШ ЧРЕТЕД ХЛБЪБФЕМШ ЖБКМБ *)
printpos ('дП ЧЩЪПЧБ fork', fd);
(* уПЪДБФШ ДЧБ РТПГЕУУБ *)
pid := fork;
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.
(* рТЕДРПМПЦЙН, ЮФП ДМЙОБ ЖБКМБ "data" ОЕ НЕОЕЕ 20 УЙНЧПМПЧ *)
uses linux,stdio;
procedure fatal(s:pchar);
begin
perror(s);
halt(1);
end;
(* чЩЧЕУФЙ РПМПЦЕОЙЕ Ч ЖБКМЕ *)
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;
var
fd:integer;
pid:longint; (* ЙДЕОФЙЖЙЛБФПТ РТПГЕУУБ *)
buf:array [0..9] of char; (* ВХЖЕТ ДБООЩИ ДМС ЖБКМБ *)
begin
fd := fdopen ('data', Open_RDONLY);
if fd = -1 then
fatal ('пЫЙВЛБ ЧЩЪПЧБ open ');
fdread (fd, buf, 10); (* РЕТЕНЕУФЙФШ ЧРЕТЕД ХЛБЪБФЕМШ ЖБКМБ *)
printpos ('дП ЧЩЪПЧБ fork', fd);
(* уПЪДБФШ ДЧБ РТПГЕУУБ *)
pid := fork;
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.
Соседние файлы в папке 5