【发布时间】:2020-07-06 13:55:42
【问题描述】:
所以我试图在 C 中获取文件的大小。
我知道在 C 中获取文件大小的两种方法,使用stat 结构的st_size 成员或在文件的开头和结尾之间使用fseek。
但是,我担心st_size 方法是否会在文件有漏洞时报告文件的“错误大小”。
我想如果文件有漏洞,fseek 方法肯定会产生不正确的结果,对吗?
根据“UNIX 环境中的高级编程”一书第 4.12 节,解决此问题的一种方法是将文件复制到内存中并从内存中读取其大小。但我不知道如何在 C 中做到这一点,所以我想知道你到底是怎么做到的。
感谢任何帮助。
【问题讨论】:
-
你是如何定义一个洞的?
-
您所说的“无孔”到底是什么意思?如果您的意思是 Unix 不存储完整的零字节块的做法,那么这些未存储的字节与文件的任何其他部分一样多。为什么你不想计算它们?如果你想要
du大小,du已经存在。 -
顺便说一句,
du的大小是根据stat的st_blocks成员计算得出的。 -
我认为你误解了史蒂文斯的那段话。
-
你当然是。它没有说任何这样的事情。它说相反。如果您读取带有孔的文件,则孔将填充零字节。计算这样做的结果会得到与
st_size相同的结果。