我应该使用 fseek SEEK_END 吗?

4

我的问题很简单:

我应该使用fseek和SEEK_END来到达文件末尾,然后获取其长度吗? 因为在man中有这样的说法:

  • 库实现允许不支持意义上的 SEEK_END(因此,使用它的代码没有真正的标准可移植性)。

目前我正在使用C语言中的stat函数,它更好吗?


你提到了 statman,所以可以安全地假设你正在使用 Linux 或其他 Unix 吗?你关心其他平台吗? - BoBTFish
2
这个问题很好,但是你表达的方式使它严重依赖于观点并导致讨论,这是不可取的。 - Kevin
请勿使用fseek()和ftell()计算常规文件的大小。参见https://www.securecoding.cert.org/confluence/display/seccode/FIO19-C。 - Joseph Quinsey
2个回答

4
ftell 函数返回一个 long 类型的值,在 ILP32 系统上,您无法正确获取大于 2GB 的文件大小。您应该使用 stat 函数或类似函数来获取文件的大小;请查阅操作系统手册,以确定目标操作系统中需要使用不同的函数名称(例如 stat64)或定义预处理器宏以获取大文件所需的行为。

1

由于C++从C继承了fseekSEEK_END,因此我在这里引用C标准:

C11(ISO/IEC 9899:201x)§7.21.9.2 The fseek function第3节

二进制流不必有意义地支持whence值为SEEK_ENDfseek调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接