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



Описание


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




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