我知道这-D_FILE_OFFSET_BITS=64会导致off_t64 位。那么-D_LARGEFILE_SOURCE,尚未完成的工作是-D_FILE_OFFSET_BITS=64什么?这些定义究竟做了什么?
2 回答
GLIBC功能测试宏文档指出:
_LARGEFILE_SOURCE
如果定义了此宏,则可以使用一些额外的功能来纠正所有先前标准中的一些缺点。具体来说,函数 fseeko 和 ftello 可用。如果没有这些函数,ISO C 接口(fseek、ftell)和低级 POSIX 接口(lseek)之间的差异将导致问题。此宏是作为大文件支持扩展 (LFS) 的一部分引入的。
因此,该宏专门制作fseeko并ftello可用。_FILE_OFFSET_BITS单独的设置不能使这些功能可用。
(请注意,如果您使用的是 C 的 GNU 方言(GCC 的默认方言),您可能不需要显式定义_LARGEFILE_SOURCE。-std=c99例如,如果您使用的话,您可以这样做。)
另一个答案是错误的,因为文档_LARGEFILE_SOURCE具有误导性。_FILE_OFFSET_BITS=64足以公开fseekoandftello函数,_POSIX_C_SOURCE定义为 >= 的宏也是如此200112L。
来自 glibc 文档_FILE_OFFSET_BITS
如果宏定义为值 64,则大文件接口替换旧接口。即,这些函数不能以不同的名称提供(因为它们是
_LARGEFILE64_SOURCE)。相反,旧函数名称现在引用新函数,例如,调用fseekonow 确实调用fseeko64。
始终定义_FILE_OFFSET_BITS=64为在 32 位基于 glibc 的系统上切换到 64 位类型。glibc 真的应该让它成为默认值......