相关疑难解决方法(0)

ftell在2GB以上的位置

在32位系统上,ftell如果以二进制模式打开的文件的当前位置指示符超过2GB点,会返回什么?在C99标准中,这是未定义的行为,因为ftell必须返回一个long int(最大值为2**31-1)?

c file-io stdio c99 ftell

9
推荐指数
2
解决办法
7636
查看次数

大文件支持在 C 编程中不起作用

我正在尝试编译一个共享对象(最终在带有 ctypes 的 Python 中使用)。用于构建对象的命令行是:

gcc -Wall -O3 -shared -Wl,-soname,borg_stream -lm -m128bit-long-double -fPIC \
    -D_FILE_OFFSET_BITS=64 -o borg_stream.so data_stream.c data_types.c \
    file_operations.c float_half.c channels.c statistics.c index_stream.c helpers.c
Run Code Online (Sandbox Code Playgroud)

该库在 32 位操作系统上正确构建,并且可以为小文件执行所需的操作。但是,它无法通过大于 4GB 的文件的单元测试。此外,它在执行 fseek/ftell 时将 errno 设置为 EOVERFLOW。但是,如果我 printf sizeof(off_t),它返回 8。如果我 remove -D_FILE_OFFSET_BITS=64,那么它打印 4。所以它似乎-D_FILE_OFFSET_BITS是正确地完成它的工作。

为什么大文件支持仍然不起作用?我究竟做错了什么?

c large-files

3
推荐指数
1
解决办法
4814
查看次数

标签 统计

c ×2

c99 ×1

file-io ×1

ftell ×1

large-files ×1

stdio ×1