【问题标题】:struct dirent in C d_name[256] and NAME_MAX definitionC d_name[256] 和 NAME_MAX 定义中的 struct dirent
【发布时间】:2018-03-30 21:44:40
【问题描述】:

我对在 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 规定的唯一结构中的唯一字段 是:d_name[],大小不定,最多有NAME_MAX 个字符 在终止空字节('\0')之前;和(作为 XSI 扩展 锡安)d_ino。其他字段未标准化,不存在 在所有系统上;有关更多详细信息,请参阅下面的注释。

【问题讨论】:

    标签: c directory readdir dirent.h


    【解决方案1】:

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

    long max = pathconf(pathname, _PC_NAME_MAX);
    

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

    【讨论】:

    • NAME_MAX 不包括终止符,只是 strlen,所以它匹配 d_name。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多