我了解-D_FILE_OFFSET_BITS=64
导致off_t
为64位。那么-D_LARGEFILE_SOURCE
尚未完成-D_FILE_OFFSET_BITS=64
做了什么?这些定义到底做了什么?
答案 0 :(得分:9)
GLIBC Feature test macros文件说明:
_LARGEFILE_SOURCE
如果定义了这个宏,则可以使用一些额外的功能来纠正所有先前标准中的一些缺点。具体来说,功能fseeko和ftello是可用的。如果没有这些功能,ISO C接口(fseek,ftell)和低级POSIX接口(lseek)之间的区别将导致问题。此宏是作为大文件支持扩展(LFS)的一部分引入的。
因此该宏专门提供fseeko
和ftello
。仅_FILE_OFFSET_BITS
设置无法使这些功能可用。
(请注意,如果您使用的是C语言的GNU方言,GCC的默认方言,您可能不需要明确定义_LARGEFILE_SOURCE
。例如,如果您使用-std=c99
,则会这样做。)< / p>
答案 1 :(得分:4)
另一个答案是错误的,因为(private_messages.sender ='Admin' OR private_messages.receiver ='Admin')
的文档具有误导性。 _LARGEFILE_SOURCE
足以公开_FILE_OFFSET_BITS=64
和fseeko
函数,ftello
宏定义为&gt; = _POSIX_C_SOURCE
。
来自200112L
如果将宏定义为值64,则大文件接口将替换旧接口。即,函数不能以不同的名称提供(与
_FILE_OFFSET_BITS
一样)。相反,旧的函数名称现在引用新函数,例如,对_LARGEFILE64_SOURCE
的调用现在确实调用了fseeko
。
始终定义fseeko64
以切换到基于32位glibc的系统上的64位类型。 glibc应该真的成为默认...