READDIR(2) | Руководство программиста Linux | 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 определена (в файле ядра 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 ('\0'). В d_name указывается имя файла, завершающееся null.
При успешном выполнении возвращается 1. Если каталог закончился возвращается 0. При ошибке возвращается -1, а переменной errno присваивается номер ошибки.
Данный вызов есть только в Linux.
В glibc нет обёртки для данного системного вызова; запускайте его с помощью syscall(2). Структуру old_linux_dirent нужно определить самостоятельно. Однако лучше использовать readdir(3).
Этот системный вызов отсутствует на x86-64.
2019-03-06 | Linux |