struct dirent

Структура данных для элементов внутри директории

Прототип:

#include <dirent.h>
struct dirent {
#if _FILE_OFFSET_BITS - 0 == 64
ino_t d_ino; /* File serial number. */
off_t d_offset;
#elif !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS == 32
#if defined(__LITTLEENDIAN__)
ino_t d_ino; /* File serial number. */
ino_t d_ino_hi;
off_t d_offset;
off_t d_offset_hi;
#elif defined(__BIGENDIAN__)
ino_t d_ino_hi;
ino_t d_ino; /* File serial number. */
off_t d_offset_hi;
off_t d_offset;
#else
#error endian not configured for system
#endif
#else
#error _FILE_OFFSET_BITS value is unsupported
#endif
_Int16t d_reclen;
_Int16t d_namelen;
char d_name[1];
};

Описание:

Структура dirent описывает элемент в директории. Поля структуры включают:

d_ino
Уникальный в пределах точки монтирования последовательный номер файла (inode). Этот номер часто используется в различных утилитах проверки диска в таких операциях, как определение бесконечных ссылок на каталоги. Обратите внимание, что значение inode не может быть нулевым, что означает, что inode представляет собой неиспользуемый или удаленный элемент.
d_offset
В некоторых файловых системах данное поле идентифицирует сам элемент директории; в других оно является смещением следующего элемента директории. Для дисковой файловой системы это значение может быть фактическим смещением в структуре каталогов на диске.
d_reclen
Размер элемента директории и любая другая связанная информация (такая, как опциональная структура struct stat, добавленная к структуре dirent элемента).
d_namelen
Размер поля d_name. Поскольку размер рассчитывается с помощью strlen(), но без учета обязательно присутствующего завершающего строку нуль-терминатора \0.
d_name
Фактическое имя элемента в каталоге.

Note: Структура dirent включает пространство только для первых четырех байт имени файла. При создании экземпляра этой структуры данное обстоятельство следует учитывать и обеспечить достаточное количество памяти для имени, включая завершающий нуль-терминатор:

struct dirent *entry;
entry = malloc( offsetof( struct dirent, d_name ) + NAME_MAX + 1 );

или:

struct {
struct dirent ent;
char namebuf[NAME_MAX + 1 + offsetof( struct dirent, d_name ) -
sizeof( struct dirent )];
} entry;


Классификация:

POSIX 1003.1

Тематические ссылки:

readdir(), readdir_r(), scandir()




Предыдущий раздел: Описание API системной библиотеки