пытаемся преобразовать имя элемента катлога
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
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий