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


           

пытаемся преобразовать имя элемента катлога


  while elem<>nil do              (*пока не достигнут конец каталога*)

  begin

    (* пытаемся преобразовать имя элемента катлога в число*)

    val(strpas(elem^.name),number,coder);

    (*если это удается, катлог имеет числовое имя и соответствует процессу*)

    if coder=0 then

    begin

    (*формируем путь к файлу status в виде /proc/номер_процесса/status *)

      strcopy(fullpath,'/proc/');

      strcat(fullpath,elem^.name);

      strcat(fullpath,'/status');

      (*открываем файл и чтиаем из него первую строку*)

      assign(f,fullpath);

      reset(f);

      readln(f,name);

      close(f);

     (*вырезаем из строки ту ее часть, что соответствует имени процесса*)

      strlcopy(realname,@name[7],length(name));

      realname[length(name)-6]:=#0;

      (*выводим номер и имя процесса*)

      writeln(number,#9,realname);

    end;

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

  end;

  closedir(d);                    (*закрытие открытого opendir каталога*)

end.

Упражнение 13.37. Используя файловую систему /proc, получите информацию об открытых всеми процессами файлах.

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

var

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

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

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

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

          :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;

 


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





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