C d_name[256]和name_MAX定义中的struct dirent
我对在struct-dirent定义中使用C d_name[256]和name_MAX定义中的struct dirent,c,directory,readdir,dirent.h,C,Directory,Readdir,Dirent.h,我对在struct-dirent定义中使用d\u-name[256]和name\u-MAX感到困惑。d_name[256]是否意味着文件名长度可以是256个字符?然后它还提到了名称_MAX(在底部引用)。所以,我的问题是NAME\u MAX在这里是如何关联的,在哪里可以找到NAME\u MAX值和定义 在man readdirstruct dirent中定义如下 struct dirent { ino_t d_ino; /* inode number */
d\u-name[256]
和name\u-MAX
感到困惑。d_name[256]
是否意味着文件名长度可以是256个字符?然后它还提到了名称_MAX(在底部引用)。所以,我的问题是NAME\u MAX
在这里是如何关联的,在哪里可以找到NAME\u 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 */
};
它还声称
dirent结构中唯一由POSIX.1授权的字段
是:d\u name[]
,未指定大小,最多包含name\u MAX
个字符
在终止的空字节('\0')之前;和(作为XSI扩展)
锡安)d_ino
。其他字段不标准,不存在
在所有系统上;有关更多详细信息,请参见下面的注释
NAME\u MAX
在limits.h
中声明。您还可以使用pathconf()
或fpathconf()
获取每个文件系统的限制
long max = pathconf(pathname, _PC_NAME_MAX);
由于该结构硬编码为
256
,因此它实际上无法处理文件名较长的文件系统。因此NAME\u MAX
最多只能255
(这确实是它在我的OS X机器上的值)。NAME\u MAX
在limits.h
中声明。您还可以使用pathconf()
或fpathconf()
获取每个文件系统的限制
long max = pathconf(pathname, _PC_NAME_MAX);
由于该结构硬编码为
256
,因此它实际上无法处理文件名较长的文件系统。因此NAME\u MAX
最多只能255
(这在我的OS X机器上确实是它的值)。NAME\u MAX不包括终止符,只是strlen,所以它匹配d\u NAME。NAME\u MAX不包括终止符,只是strlen,所以它匹配d\u NAME。