dirent.h

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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)