【问题标题】:off_t without -D_FILE_OFFSET_BITS=64 on a file > 2GBoff_t 不带 -D_FILE_OFFSET_BITS=64 的文件 > 2GB
【发布时间】:2010-07-10 22:44:52
【问题描述】:

1- 我想知道,如果我尝试读取大小大于2GB 的文件而不使用off_t 使用-D_FILE_OFFSET_BITS=64 选项编译我的程序并在@ 上使用第二个函数,会出现什么问题987654321@?会是段错误吗?

2- 我打算使用 this implementationoff64_t

#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64

会有什么问题吗?

【问题讨论】:

    标签: c file large-files


    【解决方案1】:
    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 位平台上调用 stat() 大小超过 (2

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        不应该是segfault,但是文件大小不会正确报告。

        【讨论】:

          猜你喜欢
          • 2015-05-25
          • 1970-01-01
          • 2021-09-04
          • 2013-03-25
          • 1970-01-01
          • 1970-01-01
          • 2010-11-15
          • 1970-01-01
          • 2013-12-29
          相关资源
          最近更新 更多