为什么 d_reclen 变量
Why is d_reclen variable
我可以使用 sizeof 运算符精确地获取 struct dirent 的大小。在我的 PC 中它打印 280.Its dirent.h 中的定义如下。
struct dirent
{
#ifndef __USE_FILE_OFFSET64
__ino_t d_ino;
__off_t d_off;
#else
__ino64_t d_ino;
__off64_t d_off;
#endif
unsigned short int d_reclen;
unsigned char d_type;
char d_name[256]; /* We must not include limits.h! */
};
它是correct.But 我还注意到d_reclen是一个显示记录长度的成员,它打印像24、32、40.etc这样的数字。
所以在记忆中,哪个是结构的实际大小?
sizeof()
显示 280 的事实,即使这反映了内存中结构的实际空间,也无关紧要。虽然 d_name
在这个 特定的 定义中是 [256]
,但 POSIX 将其定义为 d_name[]
,一个未指定大小的字符数组。根据目录名称的大小(更短/更长),确实应该能够在 d_reclen
中观察到不同的值,例如上例中的 24 或 32。
请参阅 man 页面中“注意事项”下的“d_name 字段”部分。
简而言之,在 d_name
上执行 sizeof()
是不正确的。应用程序应使用 d_reclen
或对 d_name
执行 strlen()
以了解名称长度。
我可以使用 sizeof 运算符精确地获取 struct dirent 的大小。在我的 PC 中它打印 280.Its dirent.h 中的定义如下。
struct dirent
{
#ifndef __USE_FILE_OFFSET64
__ino_t d_ino;
__off_t d_off;
#else
__ino64_t d_ino;
__off64_t d_off;
#endif
unsigned short int d_reclen;
unsigned char d_type;
char d_name[256]; /* We must not include limits.h! */
};
它是correct.But 我还注意到d_reclen是一个显示记录长度的成员,它打印像24、32、40.etc这样的数字。 所以在记忆中,哪个是结构的实际大小?
sizeof()
显示 280 的事实,即使这反映了内存中结构的实际空间,也无关紧要。虽然 d_name
在这个 特定的 定义中是 [256]
,但 POSIX 将其定义为 d_name[]
,一个未指定大小的字符数组。根据目录名称的大小(更短/更长),确实应该能够在 d_reclen
中观察到不同的值,例如上例中的 24 或 32。
请参阅 man 页面中“注意事项”下的“d_name 字段”部分。
简而言之,在 d_name
上执行 sizeof()
是不正确的。应用程序应使用 d_reclen
或对 d_name
执行 strlen()
以了解名称长度。