当前位置: 技术问答>linux和unix
一道习题的,关于struct dirent中d_name的问题
来源: 互联网 发布时间:2016-03-20
本文导语: 看了一道习题,不知道为什么如此? 在struct dirent 中,数组d_name[]的长度在有的系统是1,有的系统是255,实际长度是多少?为什么会有这些不同?为什么不定义成char *? 附: struct dirent{ ino_t d_ino; off_t d_off; ...
看了一道习题,不知道为什么如此?
在struct dirent 中,数组d_name[]的长度在有的系统是1,有的系统是255,实际长度是多少?为什么会有这些不同?为什么不定义成char *?
附:
struct dirent{
ino_t d_ino;
off_t d_off;
unsigned short d_reclen;
char d_name[1];
}
在struct dirent 中,数组d_name[]的长度在有的系统是1,有的系统是255,实际长度是多少?为什么会有这些不同?为什么不定义成char *?
附:
struct dirent{
ino_t d_ino;
off_t d_off;
unsigned short d_reclen;
char d_name[1];
}
|
为了减少空间的使用
下边这个地方有你需要的答案
http://blog.csdn.net/zhy10/archive/2008/01/25/2065278.aspx
下边这个地方有你需要的答案
http://blog.csdn.net/zhy10/archive/2008/01/25/2065278.aspx
|
在 Linux 里可以动态指定数组的大小。
这样比较方便,不用 char * 的原因我想的是这样的:
如果使用 char *d_name 那在用的时候可能就是
d_name = (char *)malloc(size);
memset(d_name, 0, size);
就是要手工调用 malloc 等内存函数,比用数组表示方式要繁琐一点。
这样比较方便,不用 char * 的原因我想的是这样的:
如果使用 char *d_name 那在用的时候可能就是
d_name = (char *)malloc(size);
memset(d_name, 0, size);
就是要手工调用 malloc 等内存函数,比用数组表示方式要繁琐一点。
|
一般在一些嵌入式系统中会这样用,可以想象一下,如果定义成255,那就是不管文件名到底有多长,都会占用这么多空间的,那会照成很大的空间浪费的。