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