Системное программирование в UNIX средствами Free Pascal



         

. Управление процессами - часть 8


uses crt,dos;

var i:integer;

    s,st:array[0..200]of char;

   

    c:char;

function setenv(s1,s2:pchar;ower:integer):integer;cdecl;external 'c';

begin

  for i:=1 to envcount do

    writeln(envstr(i),'=',getenv(envstr(i))); 

  writeln('Введите переменную окружения, но только большими буквами.');

  readln(s);

  if getenv(strpas(s))<>'' then

    writeln(getenv(strpas(s)))

  else

  begin

    writeln('Переменной окружения ',s,' не существует');

    halt;

  end;

  writeln('Хотите изменить значение ',s,' нажмите  "y" ');

  c:=readkey;

  if upcase(c)='Y' then

  begin

    writeln('Введите значение переменной');

    readln(st);

    if setenv(s,st,1)<0 then

      writeln('Значение переменной не поменялось')

    else

      writeln(setenv(s,st,1),' ',getenv(strpas(s)));

  end;

end.

Упражнение 13.56. Напишите функцию sleep(n), задерживающую выполнение программы на n секунд. Воспользуйтесь системным вызовом alarm(n) (будильник) и вызовом pause(), который задерживает программу до получения любого сигнала. Предусмотрите рестарт при получении во время ожидания другого сигнала, нежели SIGALRM. Сохраняйте заказ alarm, сделанный до вызова sleep (alarm выдает число секунд, оставшееся до завершения предыдущего заказа).

uses dos,crt,sysutils,linux;

 

procedure handler(sig:integer);cdecl;

begin

end;

 

procedure sleep(count:integer);

var

  oldhandler,newhandler:sigactionrec;

begin

     

  writeln('count=',count);

  newhandler.handler.sh:=@handler;

  (*newhandler.sa_mask:=$ffffffff;*)

  newhandler.sa_mask:=0;

  sigaction(SIGALRM,@newhandler,@oldhandler);

  alarm(count);

  pause;

  sigaction(SIGALRM,@oldhandler,nil);

end;

begin

repeat

sleep(3);

writeln('Привет');

until keypressed;

end.




Содержание  Назад  Вперед