DIRECTORY(3X) DIRECTORY(3X)
НАЗВАНИЕ
directory: opendir, readdir, telldir, seekdir,
rewinddir, closedir - операции над каталогами
СИНТАКСИС
#include
#include
DIR *opendir (filename)
char *filename;
struct dirent *readdir (dirp)
DIR *dirp;
long telldir (dirp)
DIR *dirp;
void seekdir (dirp, loc)
DIR *dirp;
long loc;
void rewinddir (dirp)
DIR *dirp;
void closedir (dirp)
DIR *dirp;
ОПИСАНИЕ
Функция opendir открывает каталог с именем filename и
связывает с ним поток каталога. Opendir возвращает в
качестве результата указатель, который используется в
последующих операциях для идентификации потока катало-
га. Пустой указатель возвращается, если файл filename
не доступен или не является каталогом, либо, если ко-
манда malloc(1M) не может выделить достаточного объема
памяти для структуры типа DIR или для буферов.
Функция readdir выдает указатель на следующий активный
элемент каталога. Указатели на неактивные элементы ка-
талога не выдаются. При достижении конца каталога или
при выявлении некорректной позиции в каталоге возвраща-
ется пустой указатель.
Функция telldir выдает текущую позицию в указанном по-
токе каталога.
Функция seekdir устанавливает позицию для последующей
операции readdir над потоком каталога. Данная позиция
совпадает с той, которая была получена в результате вы-
полнения операции telldir, вычислившей loc. Значения,
которые возвращает telldir, корректны только в том слу-
чае, если каталог не сжимался и не расширялся. Такая
проблема не возникает в случае версии 5, но может воз-
никнуть для некоторых других типов файловых систем.
Операция rewinddir переустанавливает в начало позицию в
указанном потоке каталога.
Операция closedir закрывает указанный поток каталога и
освобождает структуру DIR.
При выполнении перечисленных операций могут возникнуть
следующие ошибки:
opendir:
[ENOTDIR] Компонент маршрутного имени filename не яв-
ляется каталогом.
[EACCES] Для компонента маршрутного имени filename
отсутствует право на поиск.
[EMFILE] Будет превышено максимально допустимое чис-
ло описателей файлов.
[EFAULT] Аргумент filename указывает за пределы от-
веденного процессу адресного пространства.
readdir:
[ENOENT] Текущая позиция каталога не соответствует
корректному элементу.
[EBADF] Описатель файла, определенный аргументом
dirp, в данный момент некорректен. Возмож-
ная причина - поток был закрыт.
telldir, seekdir и closedir:
[EBADF] Описатель файла, определенный аргументом
dirp, в данный момент некорректен. Возмож-
ная причина - поток был закрыт.
ПРИМЕР
Приведем фрагмент программы для поиска в каталоге эле-
мента name:
dirp = opendir (".");
while ((dp = readdir (dirp)) != NULL)
if (strcmp (dp->d_name, name) == 0) {
closedir (dirp);
return FOUND;
}
closedir (dirp);
return NOT_FOUND;
СМ. ТАКЖЕ
getdents(2), dirent(4).
ПРЕДОСТЕРЕЖЕНИЯ
Rewinddir реализован как макрос, поэтому к нему нельзя
применить операцию вычисления адреса функции.
|