Linux repositories inspector
Linux
2019-03-06

man-pages-ru

Russian man pages from the Linux Documentation Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

ИМЯ

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 определена (в файле ядра Linux fs/readdir.c, недоступна извне) следующим образом:
struct old_linux_dirent {
unsigned long d_ino; /* номер иноды */
unsigned long d_offset; /* смещение на данную old_linux_dirent */
unsigned short d_namlen; /* длина данной d_name */
char d_name[1]; /* имя файла (с null в конце) */ }
Значением d_ino является номер иноды. В d_offset задаётся смещение данной old_linux_dirent от начала каталога. В d_reclen задаётся размер d_name без учета завершающего байта null (\(aq\0\(aq). В d_name указывается имя файла, завершающееся null.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 1. Если каталог закончился возвращается 0. При ошибке возвращается -1, а переменной errno присваивается номер ошибки.

ОШИБКИ

EBADF Неверный файловый дескриптор fd.
EFAULT Аргумент указывает за пределы адресного пространства вызывающего процесса.
EINVAL Буфер результата слишком мал.
ENOENT Заданный каталог не существует.
ENOTDIR
Файловый дескриптор указывает не на каталог.

СООТВЕТСТВИЕ СТАНДАРТАМ

Данный вызов есть только в Linux.

ЗАМЕЧАНИЯ

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

СМОТРИТЕ ТАКЖЕ

⇧ Top