在文件> 2GB时,off_t没有-D_FILE_OFFSET_BITS = 64
1-我想知道,如果我尝试读取大小超过2GB
的文件而不用使用off_t
选项-D_FILE_OFFSET_BITS=64
并使用此页面上的第二个函数编译我的程序,会出现什么问题? 它会段错吗?
2-我打算在off64_t
和。下使用这个实现
#define _LARGEFILE64_SOURCE 1 #define _FILE_OFFSET_BITS 64
会有问题吗?
-
stat()将失败,并且在这种情况下errno设置为EOVERFLOW。 这是linux手册页所说的内容
EOVERFLOW stat()) path refers to a file whose size cannot be represented in the type off_t. This can occur when an application
在没有-D_FILE_OFFSET_BITS = 64的32位平台上编译,对大小超过(2 << 31)-1位的文件调用stat()。
- 如果使用-D_FILE_OFFSET_BITS = 64进行编译,则不需要使用off64_t。 您可以继续使用off_t,它将变为64位,所有处理文件和文件大小的函数将变为64位。
永远不要明确使用off64_t
。 始终在系统上构建具有64位文件偏移的程序,在这些系统上必须明确指定它。 不这样做是一个主要的错误,您的用户最终会讨厌。 不知道为什么它不是现代系统的默认值……
它不应该是段错误,但文件的大小将无法正确报告。