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


         

Файловая система proc


Упражнение 13.35. Напишите программу, печатающую: свои аргументы, переменные окружения, информацию обо всех открытых ею файлах и используемых каналах.

uses dos,linux,strings;

var

  i,n,pid:integer;

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

  temp:string;

  d:pdir;

  el:pdirent;

begin

  i:=fdopen('/etc/passwd',Open_RDONLY);

  n:=paramcount;

  writeln('В командной строке ',paramcount+1, ' параметров');

  for i:=0 to n do

    writeln('Параметр ',i+1,' - ',paramstr(i));

  writeln('Переменные окружения:');

  n:=envcount;

  for i:=1 to n do

    writeln(envstr(i));

  pid:=getpid;

  strcopy(s,'/proc/');

  str(pid,temp);

  strpcopy(s+strlen(s),temp);

  strcat(s,'/fd/');

  d:=opendir(pchar(s));

  el:=readdir(d);

  writeln('Файлы, открытые процессом:');

  while el<>nil do

  begin

    if (strcomp(el^.name,'.')<>0) and (strcomp(el^.name,'..')<>0) then

    begin

      strcopy(fullname,s);

      strcat(fullname,el^.name);

      writeln('Дескриптор ',el^.name,' соответствует ',readlink(fullname));

    end;

    el:=readdir(d);

  end;

  closedir(d);

end.

 

Упражнение 13.36. Создайте аналог команды ps.

uses linux,strings,sysutils; (*для системных вызовов Linux и работы со строками PChar*)

var

  d:^TDir;        (*указатель на запись для работы с каталогом*)

  elem:^Dirent;   (*указатель на запись, хранящую один элемент каталога*)

  realname,                       (*имя процесса из файла status*)    

  fullpath                        (*полный путь к элементу каталога*)

          :array [0..1000] of char;

  number,coder:integer;    (*номер процесса и код ошибки преобразования*)

  f:text;

  name:string;

begin

  d:=opendir('/proc');        (*попытка открытия каталога для чтения*)

 

  if d=nil then                   (*если попытка не удалась*)

  begin

    writeln('Ошибка вызова opendir для каталога /proc');  (*диагностика*)

    halt(1);                        (*возврат в предыдущую программу*)

  end;

 

  elem:=readdir(d);               (*попытка чтения элемента каталога*)



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





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий