在文件上没有-D_FILE_OFFSET_BITS = 64的off_t> 2GB

时间:2010-07-10 22:44:52

标签: c file large-files

1-我想知道,如果我尝试读取大于2GB的文件,而不使用-D_FILE_OFFSET_BITS=64使用off_t编译我的程序,那会出现什么问题使用this page上的第二个函数?会不会发生错误?

2-我打算将this implementationoff64_t

一起使用
#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64

会有任何问题吗?

3 个答案:

答案 0 :(得分:8)

  1. stat()将失败,并且错误设置 在那种情况下到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位平台上调用a上的stat()       大小超过(2 <&lt; 31)-1位的文件。

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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

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