C d_name[256]和name_MAX定义中的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 */

我对在struct-dirent定义中使用
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。