Скачиваний:
17
Добавлен:
08.01.2014
Размер:
1.72 Кб
Скачать
(* рТПЗТБННБ join - УПЕДЙОСЕФ ДЧЕ РТПЗТБННЩ ЛБОБМПН *)
uses linux,stdio;

function fatal (s:pchar):integer;
begin
perror (s);
halt (1);
end;


function join (com1, com2:ppchar):integer;
var
fdin,fdout:longint;
status:integer;
begin
(* уПЪДБФШ ДПЮЕТОЙК РТПГЕУУ ДМС ЧЩРПМОЕОЙС ЛПНБОД *)
case fork of
-1: (* ПЫЙВЛБ *)
fatal ('пЫЙВЛБ 1 ЧЩЪПЧБ fork Ч РТПЗТБННЕ join');
0: (* ДПЮЕТОЙК РТПГЕУУ *)
;
else (* ТПДЙФЕМШУЛЙК РТПГЕУУ *)
begin
wait(@status);
join:=status;
exit;
end;
end;
(* пУФБФПЛ РТПГЕДХТЩ, ЧЩРПМОСЕНПК ДПЮЕТОЙН РТПГЕУУПН *)
(* уПЪДБФШ ЛБОБМ *)
if not assignpipe(fdin,fdout) then
fatal ('пЫЙВЛБ ЧЩЪПЧБ pipe Ч РТПЗТБННЕ join');
(* уПЪДБФШ ЕЭЕ ПДЙО РТПГЕУУ *)
case fork of
-1:
(* ПЫЙВЛБ *)
fatal ('пЫЙВЛБ 2 ЧЩЪПЧБ fork Ч РТПЗТБННЕ join');
0:
begin
(* РТПГЕУУ, ЧЩРПМОСАЭЙК ЪБРЙУШ *)
dup2 (fdout, 1); (* ОБРТБЧЙФШ УФ. ЧЩЧПД Ч ЛБОБМ *)
fdclose (fdin); (* УПИТБОЙФШ ДЕУЛТЙРФПТЩ ЖБКМПЧ *)
fdclose (fdout);
execvp (com1[0], com1, envp);
(* еУМЙ execvp ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ, ФП РТПЙЪПЫМБ ПЫЙВЛБ *)
fatal ('пЫЙВЛБ 1 ЧЩЪПЧБ execvp Ч РТПЗТБННЕ join');
end;
else
begin
(* РТПГЕУУ, ЧЩРПМОСАЭЙК ЮФЕОЙЕ *)
dup2 (fdin, 0); (* ОБРТБЧЙФШ УФ. ЧЧПД ЙЪ ЛБОБМБ *)
fdclose (fdin);
fdclose (fdout);
execvp (com2[0], com2, envp);
fatal ('пЫЙВЛБ 2 ЧЩЪПЧБ execvp Ч РТПЗТБННЕ join');
end;
end;
end;


const
one:array [0..3] of pchar = ('ls', '-l', '/usr/lib', nil);
two:array [0..2] of pchar = ('grep', '^d', nil);
var
ret:integer;
begin
ret := join (one, two);
writeln ('чПЪЧТБФ ЙЪ РТПЗТБННЩ join ', ret);
halt (0);
end.
Соседние файлы в папке 7