readdir(2) - Linux man page

名称

readdir - 读取目录条目

概要

int readdir(unsigned int fd, struct old_linux_dirent *dirp,
            unsigned int count);
注意:glibc 没有为该系统调用提供封装函数;请参阅“备注”部分。

描述

这不是你感兴趣的函数。请查看 readdir(3) 以获取符合 POSIX 标准的 C 库接口。本页记录了裸内核系统调用接口,该接口已被 getdents(2) 取代。

readdir() 从文件描述符 fd 指向的目录中读取一个 old_linux_dirent 结构体到 dirp 指向的缓冲区。参数 count 被忽略;最多读取一个 old_linux_dirent 结构体。

old_linux_dirent 结构体声明如下

struct old_linux_dirent {
    long  d_ino;              /* inode number */
    off_t d_off;              /* offset to this old_linux_dirent */
    unsigned short d_reclen;  /* length of this d_name */
    char  d_name[NAME_MAX+1]; /* filename (null-terminated) */
}
d_ino 是一个 inode 号。d_off 是从目录开始到此 old_linux_dirent 的距离。d_reclend_name 的大小,不包括终止空字节。d_name 是一个以空字符结尾的文件名。

返回值

成功时,返回 1。到达目录末尾时,返回 0。发生错误时,返回 -1,并且 errno 被设置为适当的值。

错误

EBADF

无效的文件描述符 fd

EFAULT

参数指向调用进程的地址空间之外。

EINVAL

结果缓冲区太小。

ENOENT

没有这样的目录。

ENOTDIR
文件描述符不指向目录。

符合

此系统调用是 Linux 特有的。

说明

Glibc 不提供此系统调用的封装;使用 syscall(2) 调用它。你需要自己定义 old_linux_dirent 结构体。但是,你可能应该使用 readdir(3) 代替。

参见

getdents(2), readdir(3)

引用自

explain_readdir(3), explain_readdir_or_die(3), fastrm(1), git-commit(1), git-commit-tree(1), git-log(1), git-show(1), guestmount(1), read(2), seekdir(3)