dirent.h
Материал из Википедии — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 29 октября 2012;
проверки требуют 3 правки.
dirent.h — заголовочный файл, входящий в библиотеку C POSIX library для языка Си.
Функции-члены [править]
| Название | Комментарии |
|---|---|
int closedir(DIR *dirp) |
Закрывает поток папки, указанный аргументом dirp. При успешном завершении возвращается 0, в противном случае возвращается -1. |
DIR* opendir(const char *dirname) |
Открывает поток папки, соответствующий папке с названием dirname. При успешном завершении возвращается указатель на объект типа DIR. В противном случае возвращается NULL. |
struct dirent* readdir(DIR *dirp) |
Считывает текущий элемент потока папки и передвигает внутренний указатель потока папки на следующий элемент. В случае успеха возвращает указатель на структуру, представляющую собой элемент потока папки. При достижении конца потока папки возвращается NULL. В случае возникновения ошибки также возвращается NULL. |
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) |
Инициализирует структуру типа dirent, на которую ссылается entry так, что она представляет собой текущий элемент потока папки dirp, сохраняет указатель на эту структуру по адресу, определяемому параметром result и передвигает внутренний указатель потока папки на следующий элемент. При успешном завершении возвращается 0. В противном случае возвращается код ошибки. |
void rewinddir(DIR *dirp) |
Сбрасывает внутренний указатель потока папки dirp так, что он начинает указывать на начало папки. Также обновляется состояние потока папки так же, как происходит при вызове opendir(). Возвращаемое значение отсутствует. |
void seekdir(DIR *dirp, long int loc) |
Устанавливает внутренний указатель потока папки dirp на позицию loc. Значение loc должно быть получено предшествовавшим вызовом telldir(). Если между вызовами telldir() и seekdir() был произведен вызов rewinddir(), то поведение не определено. Возвращаемое значение отсутствует. |
long int telldir(DIR *dirp) |
Возвращает текущую позицию внутреннего указателя потока папки dirp. |
Все вышеописанные функции (кроме readdir_r) устанавливают errno при возникновении ошибки.
Примеры использования [править]
#include <dirent.h> #include <stdio.h> int main (void) { DIR *dir; struct dirent *ent; char directory[255] = "./"; dir = opendir(directory); while ((ent=readdir(dir)) != 0) { printf("%s\n", ent->d_name); } closedir(dir); return 0; }
Данная программа выведет имена всех файлов и каталогов из текущего каталога.
#include <errno.h> #include <dirent.h> #include <string.h> #define FOUND 0 #define NOT_FOUND 1 #define READ_ERROR 2 #define OPEN_ERROR 3 #define NOARG 4 int main (int argc, char *argv []) { struct dirent *dp; DIR *dirp; const char *name; if (argc > 1) { name = argv [1]; } else { return NOARG; } dirp = opendir("."); while (dirp) { errno = 0; if ((dp = readdir(dirp)) != NULL) { if (strcmp(dp->d_name, name) == 0) { closedir(dirp); return FOUND; } } else { if (errno == 0) { closedir(dirp); return NOT_FOUND; } closedir(dirp); return READ_ERROR; } } return OPEN_ERROR; }
Данная программа проверяет наличие файла в текущей папке.
Константы-члены [править]
| Название | Комментарии |
|---|---|
NAME_MAX (or FILENAME_MAX) |

