Программирование в стандарте POSIX


Средства обработки каталогов


Обработка каталогов, как и обычных файлов, начинается с их открытия. Для этого предназначена функция opendir() (см. пример 6.50).

#include <dirent.h> DIR *opendir (const char *dirname);

Листинг 6.50. Описание функции opendir(). (html, txt)

После открытия текущим становится первый элемент каталога. Если в дальнейшем понадобится вновь позиционироваться на первый элемент, можно воспользоваться функцией rewinddir() (см. пример 6.51).

#include <dirent.h> void rewinddir (DIR *dirp);

Листинг 6.51. Описание функции rewinddir(). (html, txt)

Чтение элементов каталога выполняет функция readdir() (см. пример 6.52), которая возвращает указатель на структуру, представляющую текущий элемент каталога; после ее завершения текущим становится следующий элемент достижении конца каталога и в случае ошибки возвращается пустой указатель. Следовательно, если приложению необходимо различать обе ситуации, оно должно обнулить значение переменной   errno перед вызовом readdir(), а затем, если результат равен NULL, проанализировать это значение.

#include <dirent.h> struct dirent *readdir (DIR *dirp);

Листинг 6.52. Описание функции readdir(). (html, txt)

Согласно стандарту POSIX-2001, структура dirent содержит по крайней мере одно поле:

char d_name []; /* Имя файла */

В качестве необязательного описано еще одно поле:

ino_t d_ino; /* Порядковый номер файла */

Если элемент каталога представляет символьную ссылку, значение этого поля не определено.

Следует учитывать, что указатель, возвращаемый функцией readdir(), может ссылаться на область памяти, перезаписываемую другими обращениями к readdir() с тем же значением аргумента dirp. Кроме того, нужно помнить и о том, что содержимое читаемого каталога асинхронно изменяют другие процессы (потоки управления), создающие и удаляющие файлы.

После завершения работы с каталогом его следует закрыть с помощью функции closedir() (см. пример 6.53), возвращающей

#include <dirent.h> int closedir (DIR *dirp);

Листинг 6.53. Описание функции closedir(). (html, txt)




Начало  Назад  Вперед



Книжный магазин