我明白那个 -D_FILE_OFFSET_BITS=64
原因 off_t
为64位。那是什么呢 -D_LARGEFILE_SOURCE
做到这一点还没有完成 -D_FILE_OFFSET_BITS=64
?这些定义究竟做了什么?
我明白那个 -D_FILE_OFFSET_BITS=64
原因 off_t
为64位。那是什么呢 -D_LARGEFILE_SOURCE
做到这一点还没有完成 -D_FILE_OFFSET_BITS=64
?这些定义究竟做了什么?
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
足以揭露 fseeko
和 ftello
功能,等等 _POSIX_C_SOURCE
宏定义为> = 200112L
。
从glibc文档上 _FILE_OFFSET_BITS
如果将宏定义为值64,则大文件接口将替换旧接口。即,功能不能以不同的名称提供(因为它们具有
_LARGEFILE64_SOURCE
)。相反,旧的函数名称现在引用新函数,例如,调用fseeko
现在确实打电话fseeko64
。
总是定义 _FILE_OFFSET_BITS=64
在32位基于glibc的系统上切换到64位类型。 glibc应该真的让它成为默认...