在文件> 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 

会有问题吗?

  1. 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()。

  2. 如果使用-D_FILE_OFFSET_BITS = 64进行编译,则不需要使用off64_t。 您可以继续使用off_t,它将变为64位,所有处理文件和文件大小的函数将变为64位。

永远不要明确使用off64_t 。 始终在系统上构建具有64位文件偏移的程序,在这些系统上必须明确指定它。 不这样做是一个主要的错误,您的用户最终会讨厌。 不知道为什么它不是现代系统的默认值……

它不应该是段错误,但文件的大小将无法正确报告。