2017-10-18 131 views
0

在struct dirent定义中,我对使用d_name[256]NAME_MAX感到困惑。 d_name[256]是否意味着文件名长度可以是最多256个字符?然后它也提到了NAME_MAX(在底部引用)。那么,我的问题是如何与NAME_MAX相关,我在哪里可以找到NAME_MAX的价值和定义?C d_name [256]和NAME_MAX定义中的struct dirent

man readdirstruct 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_name[],未指定大小,具有至多NAME_MAX字符 终止空前述字节('\ 0');和(作为XSI exten- sion)d_ino。其他领域没有标准化,并且在所有系统上不存在 ;有关更多详细信息,请参阅下面的注释。

回答

2

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

long max = pathconf(pathname, _PC_NAME_MAX); 

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

+0

NAME_MAX不包含终止符,只是strlen,所以它与d_name匹配。 –