【发布时间】:2013-04-07 07:10:33
【问题描述】:
上下文:
readdir_r 函数用于从DIR* 读取下一个条目(还有readdir,但这不是线程安全的)。 readdir_r 采用指向用户分配缓冲区的指针来保存输出 dirent。手册页指出此缓冲区所需的大小在不同系统上可能不同,并提供了如何在运行时找到安全长度的示例:
len = offsetof(struct dirent, d_name) + pathconf(dirpath, _PC_NAME_MAX) + 1;
(警告:上面有一个竞争条件,可以通过使用dirfd获取打开的DIR*的文件描述符并使用fpathconf而不是pathconf来避免)
问题:
查看pathconf 的联机帮助页,它指出:
_PC_NAME_MAX 返回允许进程创建的目录路径或 fd 中文件名的最大长度。对应的宏是_POSIX_NAME_MAX。
但是,在注释部分,它指出:
名称长度大于返回的名称等于 _PC_NAME_MAX 的值的文件可能存在于给定目录中。
这个注释是真的吗?如果是这样,readdir_r 手册页中的示例代码是否不正确?
【问题讨论】: