READDIR(2)

ИМЯ
readdir - читает элемент каталога

ОБЗОР

int readdir(unsigned int fd, struct old_linux_dirent *dirp,
            unsigned int count);
Замечание:В glibc нет обёрточной функции для данного системного вызова; смотрите ЗАМЕЧАНИЯ.

ОПИСАНИЕ
Эта не та функция, которая должна представлять для вас интерес. Смотрите описание функции readdir(3), которая является интерфейсом библиотеки языка C, соответствующим стандарту POSIX. В этой странице описан минимальный интерфейс системного вызова ядра, который заменён на getdents(2).

Вызов readdir() читает структуру old_linux_dirent из каталога, заданного файловым дескриптором fd, в буфер, указываемый в dirp. Аргумент count игнорируется; всегда считывается только одна структура old_linux_dirent.

Структура old_linux_dirent определена следующим образом:

struct old_linux_dirent {
    long  d_ino;              /* номер inode */
    off_t d_off;              /* смещение на данную old_linux_dirent */
    unsigned short d_reclen;  /* длина данной d_name */
    char  d_name[NAME_MAX+1]; /* имя файла (завершается null) */
}

Значением d_ino является номер inode В d_off задаётся смещение данной old_linux_dirent от начала каталога. В d_reclen задаётся размер d_name без учета завершающего байта null ('\0'). В d_name указывается имя файла, завершающееся null.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 1. Если каталог закончился возвращается 0. При ошибке возвращается -1, а переменной errno присваивается номер ошибки.

ОШИБКИ

EBADF
    Неверный файловый дескриптор fd.

EFAULT
    Аргумент указывает за пределы адресного пространства вызывающего процесса.

EINVAL
    Буфер результата слишком мал.

ENOENT
    Заданный каталог не существует.

ENOTDIR
    Файловый дескриптор указывает не на каталог.

СООТВЕТСТВИЕ СТАНДАРТАМ
Данный вызов есть только в Linux.

ЗАМЕЧАНИЯ
В glibc нет обёртки для данного системного вызова; запускайте его с помощью syscall(2). Структуру old_linux_dirent нужно определить самостоятельно. Однако лучше использовать readdir(3). Этот системный вызов отсутствует на x86-64.

СМОТРИТЕ ТАКЖЕ
getdents(2), readdir(3)