__USE_FILE_OFFSET64与_FILE_OFFSET_BITS = 64

时间:2010-12-05 05:45:49

标签: 64-bit coding-style standards-compliance

我正在尝试维护在许多不同系统上编译的代码。我已经看到了十几种不同的方式要求lseek需要64位。有些系统使用lseek64,有些系统使用lseeko,有些需要您定义_FILE_OFFSET_BITS=64,现在我找到了一个需要定义__USE_FILE_OFFSET64的新系统。

所有这些都有标准吗?

2 个答案:

答案 0 :(得分:14)

getconf values in IEEE Std 1003.1-2004(以及IEEE Std 1003.1-2008中的较新设置;另请参阅这些文档中的示例部分)。未指定实际的编译器选项(可能甚至不定义)。

但是,autoconf中的AC_SYS_LARGEFILE宏不会尝试使用此功能 - 它仅针对IRIX尝试-n32-D_FILE_OFFSET_BITS=64(适用于大多数系统)和{{1} (显然是为了AIX)。在autoconf源中还引用了Adding Support for Arbitrary File Sizes to the Single UNIX Specification(旧的规范草案,然后部分包含在POSIX.1规范中)。

至于手动定义-D_LARGE_FILES=1,不确定这是否真的是一个正确的解决方案 - 为系统头保留双下划线宏,并且很可能在那里有一些依赖于其他定义的条件定义。

答案 1 :(得分:6)

features.h中,您会看到_FILE_OFFSET_BITS__USE_FILE_OFFSET64之间的关系。

#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
# define __USE_FILE_OFFSET64    1
#endif

因此,只有_FILE_OFFSET_BITS适用于用户。