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


         

Следующий после вызова rewinddir вызов


uses stdio;
procedure rewinddir(dirptr:pdir);
Следующий после вызова rewinddir вызов readdir вернет первую запись в каталоге, на который указывает переменная dirptr.
В приведенном ниже примере функция my_double_ls дважды выведет на экран имена всех файлов в заданном каталоге. Она принимает в качестве параметра имя каталога и в случае ошибки возвращает значение -1.
uses linux,stdio;
function my_double_ls(name:pchar):integer;
var
  dp:PDIR;
  d:pdirent;
begin
  (* Открытие каталога с проверкой ошибок *)
  dp:=opendir (name);
  if dp=nil then
  begin
    my_double_ls:=-1;
    exit;
  end;
  (* Продолжить обход каталога,
   * выводя записи в нем, если
   * индекс остается допустимым
   *)
  d:=readdir(dp);
  while d<>nil do
  begin
    if d^.ino<>0 then
      writeln(d^.name);
    d:=readdir(dp);
  end;
  (* Вернуться к началу каталога ... *)
  rewinddir(dp);
  (* ... и снова вывести его содержимое *)
  d:=readdir(dp);
  while d<>nil do
  begin
    if d^.ino<>0 then
      writeln(d^.name);
    d:=readdir(dp);
  end;
  closedir(dp);
  my_double_ls:=0;
end;
Порядок выводимых функцией my_double_ls имен файлов будет совпадать с порядком расположения файлов в каталоге. Если вызвать функцию my_double_ls в каталоге, содержащем три файла abc, bookmark и fred, то ее вывод может выглядеть так:
.
..
fred
bookmark
abc
.
..
fred
bookmark
abc

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