struct diant in C d_name [256]和NAME_MAX定义

时间:2017-10-18 22:04:16

标签: c directory readdir dirent.h

我对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。其他字段是非标准化的,不存在          在所有系统上;有关更多详细信息,请参阅下面的注释。

1 个答案:

答案 0 :(得分:3)

NAME_MAXlimits.h中声明。您还可以使用pathconf()fpathconf()来获取每个文件系统的限制。

long max = pathconf(pathname, _PC_NAME_MAX);

由于结构的硬编码为256,因此无法实际处理文件名较长的文件系统。所以NAME_MAX最多只能255(这在我的OS X机器上确实是它的价值)。