Scroll to navigation

GETDENTS(2) Руководство программиста Linux GETDENTS(2)

ИМЯ

getdents - получить записи каталога

ОБЗОР

#include <unistd.h>
#include <linux/types.h>
#include <linux/dirent.h>
#include <linux/unistd.h>
 
_syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count);
 
int getdents(unsigned int fd, struct dirent *dirp, unsigned int count);

ОПИСАНИЕ

Эта не та функция, которая должна представлять для вас интерес. Смотрите функцию readdir(3), которая является интерфейсом библиотеки языка C, соответствующим стандарту POSIX.
Системный вызов getdents читает несколько структур dirent из каталога, на который указывает fd в область памяти, на которую указывает dirp. Параметр count является размером этой области памяти.
Структура dirent определена следующим образом:
struct dirent
{
    long d_ino;                 /* номер inode */
    off_t d_off;                /* смещение до следущей  dirent */
    unsigned short d_reclen;    /* длина данной  dirent */
    char d_name [NAME_MAX+1];   /* имя файла (завершаемое нулём) */
}
d_ino является номером индексного дескриптора (inode). d_off является дистанцией от начала данного каталога до начала следующей структуры dirent. d_reclen является размером данной структуры dirent. d_name является именем файла, которое завершается нулевым символом.
Данный вызов замещает readdir(2).

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

В случае успеха возвращается количество прочитанных байт. При достижении конца каталога возвращается 0. В случае ошибки возвращается -1 и значение errno устанавливается соответствующим образом.

ОШИБКИ

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

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

SVr4, SVID. SVr4 документирует дополительные ошибки ENOLINK, EIO.

СМОТРИ ТАКЖЕ

readdir(2), readdir(3)

ПЕРЕВОД

Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2004
1995-07-22 Linux 1.3.6