readdir_r 子例程

用途

读取目录。

线程安全 C 语言库libc_r.a

语法

#include <sys/types.h>
#include <dirent.h>
int readdir_r (DirectoryPointer, Entry, Result)
DIR * DirectoryPointer;
struct dirent * Entry;
struct dirent ** Result;

描述

readdir_r子程序返回结果参数指向的结构中的目录条目。 readdir_r子程序会返回 .NET 文件的条目。 (点)和 .. (点-点)目录(如果存在),但绝不会返回无效条目(用d_ino设置为 "0)。 当到达目录末尾时,"readdir_r子程序返回 "9,并将结果参数设置为 NULL。 当检测到无效的seekdir操作时,readdir_r子程序会返回 "9

注意:当应用程序使用不同的DirectoryPointer参数值(从opendir子程序返回)时,readdir子程序是可重入的。 当多个线程使用同一个目录指针时,使用readdir_r子程序。

对于DirectoryPointer参数指向的结构,在closedir子程序之后使用readdir_r子程序会产生未定义的结果。 DirectoryPointer 参数指向的结构对所有线程 (包括调用者) 都无效。

使用该子程序的程序必须链接到libpthreads.a库。

参数

描述
DirectoryPointer 指向开放目录的DIR结构。
ENTRY 指向一个包含下一个目录条目的结构。
结果 指向由 入门级 参数指定的目录条目。

返回值

描述
重大安全事件数量 指示子例程已成功。
9 指示子例程不成功,或者已到达目录末尾。 如果用户在执行进程前设置了环境变量 "XPG_SUS_ENV=ON,那么当超过进程的文件大小限制时,"SIGXFSZ信号就会发布给进程,子程序将始终成功执行。

错误代码

如果readdir_r子程序执行失败,全局变量errno将被设置为下列值之一:

描述
EACCES 拒绝对 DirectoryPointer 参数指向的结构的任何组件的搜索许可权,或者拒绝对 DirectoryPointer 参数指向的结构的读许可权。
ENAMETOOLONG _POSIX_NO_TRUNC变量有效时,DirectoryPointer参数的长度超过了PATH_MAX变量的值,或者路径名组件的长度超过了NAME_MAX变量的值。
ENOENT 指定的目录不存在。
ENOTDIR DirectoryPointer 参数指向的结构组件不是目录。
EMFILE 进程当前打开的文件描述符过多。
ENFILE 系统中当前打开的文件描述符过多。
EBADF DirectoryPointer 参数指向的结构未引用打开的目录流。

示例

要在目录中搜索条目name,请输入:

len = strlen(name);
DirectoryPointer = opendir(".");
for (readdir_r(DirectoryPointer, &Entry, &Result); Result != NULL;
 readdir_r(DirectoryPointer, &Entry, &Result))
        if (dp->d_namlen == len && !strcmp(dp->d_name, name)) {
                closedir(DirectoryPointer);
                return FOUND;
        }
closedir(DirectoryPointer);
return NOT_FOUND;