我在寻找一个明确的答案,但无法找到,所以希望有人能知道。
我正在使用GCC 4.x在Linux(32位操作系统)上开发C ++应用程序。该应用程序需要能够读取大小大于2GB的文件。
我真的很想使用iostream而不是FILE指针,但我找不到大文件#defines(_LARGEFILE_SOURCE,_LARGEFILE64_SOURCE,_FILE_OFFSET_BITS = 64)是否对iostream头文件产生任何影响。
我正在编译32位系统。任何提示都将有所帮助。
我在寻找一个明确的答案,但无法找到,所以希望有人能知道。
我正在使用GCC 4.x在Linux(32位操作系统)上开发C ++应用程序。该应用程序需要能够读取大小大于2GB的文件。
我真的很想使用iostream而不是FILE指针,但我找不到大文件#defines(_LARGEFILE_SOURCE,_LARGEFILE64_SOURCE,_FILE_OFFSET_BITS = 64)是否对iostream头文件产生任何影响。
我正在编译32位系统。任何提示都将有所帮助。
当编译libstdc++
时,已经为您决定了这一点,并且通常取决于是否在c++config.h
中定义了_GLIBCXX_USE_LFS
。
如果有疑问,请通过readelf -r
(或通过strings
)传递您的可执行文件(或libstdc++.so
,如果动态链接到它)并查看您的二进制文件/ libstdc ++
是否链接到fopen
/ fseek
/等或fopen64
/ fseek64
/等。
更新
只要您不需要/尝试fseek
或ftell
(只需从流中读取或写入),则无需担心2GB限制。
如果您正在使用GCC,您可以利用一个称为__gnu_cxx::stdio_filebuf的GCC扩展,它将IOStream绑定到标准C文件描述符。
您需要定义以下两个内容:
_LARGEFILE_SOURCE
_FILE_OFFSET_BITS=64
例如:
#include <cstdio>
#include <fstream>
#include <ext/stdio_filebuf.h>
int main()
{
std::ofstream outstream;
FILE* outfile;
outfile = fopen("bigfile", "w");
__gnu_cxx::stdio_filebuf<char> fdbuf(outfile, std::ios::out |
std::ios::binary);
outstream.std::ios::rdbuf(&fdbuf);
for(double i = 0; i <= 786432000000.0; i++) {
outstream << "some data";
fclose(outfile);
return 0;
}