Скачиваний:
17
Добавлен:
08.01.2014
Размер:
1.47 Кб
Скачать
(* tml - РТПЗТБННБ ДМС ОБРПНЙОБОЙС *)
{$mode objfpc}

uses linux, stdio, sysutils;

const
BELLS=#7#7#7; (* ЪЧХЛПЧПК УЙЗОБМ ASCII *)
alarm_flag:boolean = FALSE;

(* пВТБВПФЮЙЛ УЙЗОБМБ SIGALRM *)
procedure setflag(sig:integer);cdecl;
begin
alarm_flag := TRUE;
end;

var
nsecs, j:integer;
pid:longint;
act:sigactionrec;
begin
if paramcount < 2 then
begin
writeln (stderr, 'рТЙНЕОЕОЙЕ: tml ЮЙУМП_НЙОХФ УППВЭЕОЙЕ');
halt(1);
end;
try
nsecs := strtoint(paramstr(1)) * 60;
except
on e:econverterror do
begin
writeln (stderr, 'чЧЕДЕОП ОЕЮЙУМПЧПЕ ЪОБЮЕОЙЕ');
halt(2);
end;
end;
if nsecs <= 0 then
begin
writeln (stderr, 'tml: ОЕДПРХУФЙНПЕ ЧТЕНС');
halt(3);
end;

(* чЩЪПЧ fork, УПЪДБАЭЙК ЖПОПЧЩК РТПГЕУУ *)
pid := fork;
case pid of
-1: (* ПЫЙВЛБ *)
begin
perror ('tml');
halt(1);
end;
0: (* ДПЮЕТОЙК РТПГЕУУ *)
;
else (* ТПДЙФЕМШУЛЙК РТПГЕУУ *)
begin
writeln('рТПГЕУУ tml У ЙДЕОФЙЖЙЛБФПТПН ', pid);
halt(0);
end;
end;

(* хУФБОПЧЙФШ ПВТБВПФЮЙЛ ФБКНЕТБ *)
act.handler.sh := @setflag;
sigaction (SIGALRM, @act, nil);
(* хУФБОПЧЙФШ ФБКНЕТ *)
alarm (nsecs);
(* рТЙПУФБОПЧЙФШ ЧЩРПМОЕОЙЕ ДП РПМХЮЕОЙС УЙЗОБМБ ... *)
pause;

(* еУМЙ ВЩМ РПМХЮЕО УЙЗОБМ SIGALRM, ЧЩЧЕУФЙ УППВЭЕОЙЕ *)
if alarm_flag then
begin
write(BELLS);
for j := 2 to paramcount do
write(paramstr(j),' ');
writeln;
end;
halt(0);
end.
Соседние файлы в папке 6