繁体   English   中英

如何可移植地打开大文件支持?

[英]How can I portably turn on large file support?

我目前正在编写一个读取和写入大小可能超过2 GiB的文件的C程序。 在Linux上, feature_test_macros (7)指定:

  _LARGEFILE64_SOURCE Expose definitions for the alternative API specified by the LFS (Large File Summit) as a "tran‐ sitional extension" to the Single UNIX Specification. (See ⟨http://opengroup.org/platform /lfs.html⟩) The alternative API consists of a set of new objects (ie, functions and types) whose names are suffixed with "64" (eg, off64_t versus off_t, lseek64() versus lseek(), etc.). New programs should not employ this interface; instead _FILE_OFFSET_BITS=64 should be employed. _FILE_OFFSET_BITS Defining this macro with the value 64 automatically converts references to 32-bit functions and data types related to file I/O and file system operations into references to their 64-bit coun‐ terparts. This is useful for performing I/O on large files (> 2 Gigabytes) on 32-bit systems. (Defining this macro permits correctly written programs to use large files with only a recompi‐ lation being required.) 64-bit systems naturally permit file sizes greater than 2 Gigabytes, and on those systems this macro has no effect. 

这样可以保证便携吗?

Solaris在lfcompile (5)中建议:

  Applications can be compiled in the large file compilation environment by using the following methods: o Use the getconf(1) utility with one or more of the arguments listed in the table below. This method is recommended for portable applications. ____________________________________________________________ | argument | purpose | |__________________|________________________________________| | LFS_CFLAGS | obtain compilation flags necessary to| | | enable the large file compilation| | | environment | | LFS_LDFLAGS | obtain link editor options | | LFS_LIBS | obtain link library names | | LFS_LINTFLAGS | obtain lint options | |__________________|________________________________________| o Set the compile-time flag _FILE_OFFSET_BITS to 64 before including any headers. Applications may com- bine objects produced in the large file compilation environment with objects produced in the transi- tional compilation environment, but must be careful with respect to interoperability between those objects. Applications should not declare global variables of types whose sizes change between com- pilation environments. 

这是便携式的吗? 在我的linux机器上,将这些密钥传递给getconf将不会输出任何内容。 (这意味着密钥存在)。

有便携式的方法吗?

使用confstr界面或相应的getconf程序,并尝试各种_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS等选项,直到找到可行的选项。 这将为您提供适当环境所需的CFLAGSLDFLAGSLIBS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM