C 使用readdir获取文件大小
我打电话给readdir是为了从文件名目录中获取信息。我还希望仅在可能的情况下使用readdir打印文件大小,因为dirent的结构是 我使用d_recen作为文件大小,但不知为什么我的程序打印了错误的值。但我的问题是: 使用d_recen作为文件大小是否正确?因为我怀疑它是无符号的短文件,它如何返回大文件的正确大小。 记录的实际长度是多少?这个大小是以字节为单位的吗?如何计算正确的尺寸? 输出 编辑1 我正在使用打印文件大小:%hu\n,pent->d\u recen;打印文件大小,但它没有给出正确答案 编辑2 出于某些性能原因,我想避免使用stat。手册上说: 此记录是此结构目录实例,而不是此文件C 使用readdir获取文件大小,c,linux,C,Linux,我打电话给readdir是为了从文件名目录中获取信息。我还希望仅在可能的情况下使用readdir打印文件大小,因为dirent的结构是 我使用d_recen作为文件大小,但不知为什么我的程序打印了错误的值。但我的问题是: 使用d_recen作为文件大小是否正确?因为我怀疑它是无符号的短文件,它如何返回大文件的正确大小。 记录的实际长度是多少?这个大小是以字节为单位的吗?如何计算正确的尺寸? 输出 编辑1 我正在使用打印文件大小:%hu\n,pent->d\u recen;打印文件大小,但它没有给
对于d_reclen 20或24,您不应该访问整个dirent内存,因为readdir只分配了足够的内存来填充d_ino、d_off、d_reclen、d_type和d_name的相关部分。readdir没有为d_name分配完整的256字节。要获取文件大小,与d_recen中记录的文件名大小长度相反,您需要stat或stat或lstat系统调用。无法直接从struct dirent中的信息获取文件大小。from。。POSIX.1要求的dirent结构中的唯一字段是:d_name[],大小未指定,在终止的空字节“\0”之前最多包含name_MAX个字符;并作为XSI扩展d_ino。其他字段未标准化,并非在所有系统上都存在。@SouravGhosh:可移植性不是问题。1与其报告没有给出正确答案,不如报告输出和预期输出更有用2 d_Recen的值是此项的记录长度,而不是文件大小。3 IMO,stat.@chux:请查看编辑。记录长度和大小有什么不同?我是说唱片里有什么。我认为record是文件数据,所以record length是文件大小。
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* offset to the next dirent */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all file system types */
char d_name[256]; /* filename */
};
Actual Size :1bytes File size :20
Actual Size :4bytes File size :20
Actual Size :8bytes File size :20
Actual Size :256bytes File size :20
Actual Size :0bytes File size :20
Actual Size :255bytes File size :20
Actual Size :1023bytes File size :24
unsigned short d_reclen; /* length of this record */