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

Jos*_*osh 4 c file large-files

1-我想知道,如果我尝试读取大于2GB大小的文件而不使用该选项-D_FILE_OFFSET_BITS=64使用off_t和使用此页面上的第二个功能编译我的程序,会出现什么问题?它会段错吗?

2-我打算用和实现这个实现off64_t

#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64
Run Code Online (Sandbox Code Playgroud)

会有问题吗?

nos*_*nos 8

  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
    
    Run Code Online (Sandbox Code Playgroud)

    在没有-D_FILE_OFFSET_BITS = 64的32位平台上编译,对大小超过(2 << 31)-1位的文件调用stat().

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