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_reclen 是 d_name 的大小,不包括终止空字节。d_name 是一个以空字符结尾的文件名。
返回值
成功时,返回 1。到达目录末尾时,返回 0。发生错误时,返回 -1,并且 errno 被设置为适当的值。
错误
- EBADF
无效的文件描述符 fd。
EFAULT
参数指向调用进程的地址空间之外。
EINVAL
结果缓冲区太小。
ENOENT
没有这样的目录。
- ENOTDIR
- 文件描述符不指向目录。
符合
此系统调用是 Linux 特有的。
说明
Glibc 不提供此系统调用的封装;使用 syscall(2) 调用它。你需要自己定义 old_linux_dirent 结构体。但是,你可能应该使用 readdir(3) 代替。