pan*_*nzi 12 c linux linux-from-scratch
我明白-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
例如,如果您使用,则执行此操作.)
小智 8
另一个答案是错误的,因为文档_LARGEFILE_SOURCE
具有误导性。_FILE_OFFSET_BITS=64
足以公开fseeko
和ftello
函数,_POSIX_C_SOURCE
定义为 >=的宏也是如此200112L
。
从 glibc 文档中 _FILE_OFFSET_BITS
如果宏定义为值 64,则大文件接口将替换旧接口。即,函数不能以不同的名称使用(就像它们一样
_LARGEFILE64_SOURCE
)。相反,旧函数名称现在引用新函数,例如,对fseeko
now的调用确实会调用fseeko64
。
_FILE_OFFSET_BITS=64
在 32 位基于 glibc 的系统上始终定义切换到 64 位类型。glibc 真的应该让它成为默认...