我对struct dirent定义中d_name[256]
和NAME_MAX
的使用感到困惑。 d_name[256]
是否意味着文件名长度最多为256个字符?然后它还提到了NAME_MAX(引用在底部)。所以,我的问题是NAME_MAX
如何与此相关,我在哪里可以找到NAME_MAX
值和定义?
man readdir
struct dirent
定义如下。
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* not an offset; see NOTES */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all filesystem types */
char d_name[256]; /* filename */
};
它也断言
POSIX.1强制要求的dirent结构中的唯一字段 是:
d_name[]
,大小不明,最多NAME_MAX
个字符 在终止空字节之前(' \ 0');和(作为XSI扩展 - sion)d_ino
。其他字段是非标准化的,不存在 在所有系统上;有关更多详细信息,请参阅下面的注释。
答案 0 :(得分:3)
NAME_MAX
在limits.h
中声明。您还可以使用pathconf()
或fpathconf()
来获取每个文件系统的限制。
long max = pathconf(pathname, _PC_NAME_MAX);
由于结构的硬编码为256
,因此无法实际处理文件名较长的文件系统。所以NAME_MAX
最多只能255
(这在我的OS X机器上确实是它的价值)。