_LARGEFILE_SOURCE和_FILE_OFFSET_BITS = 64有什么区别?

时间:2013-01-06 16:15:12

标签: c linux lfs

我了解-D_FILE_OFFSET_BITS=64导致off_t为64位。那么-D_LARGEFILE_SOURCE尚未完成-D_FILE_OFFSET_BITS=64做了什么?这些定义到底做了什么?

2 个答案:

答案 0 :(得分:9)

GLIBC Feature test macros文件说明:

  

_LARGEFILE_SOURCE
  如果定义了这个宏,则可以使用一些额外的功能来纠正所有先前标准中的一些缺点。具体来说,功能fseeko和ftello是可用的。如果没有这些功能,ISO C接口(fseek,ftell)和低级POSIX接口(lseek)之间的区别将导致问题。

     

此宏是作为大文件支持扩展(LFS)的一部分引入的。

因此该宏专门提供fseekoftello。仅_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=64fseeko函数,ftello宏定义为&gt; = _POSIX_C_SOURCE

来自200112L

上的glibc文档
  

如果将宏定义为值64,则大文件接口将替换旧接口。即,函数不能以不同的名称提供(与_FILE_OFFSET_BITS一样)。相反,旧的函数名称现在引用新函数,例如,对_LARGEFILE64_SOURCE的调用现在确实调用了fseeko

始终定义fseeko64以切换到基于32位glibc的系统上的64位类型。 glibc应该真的成为默认...