我试图找到一个明确的答案并不能,所以我希望有人可能知道。

我正在开发使用在Linux(32位OS)GCC 4.x的一个C ++应用程序。此应用需要能够在尺寸上读取文件> 2GB。

我真的想使用的iostream的东西主场迎战文件指针,但我找不到,如果较大的文件#定义(_LARGEFILE_SOURCE,_LARGEFILE64_SOURCE,_FILE_OFFSET_BITS = 64)对iostream的标题任何影响。

我编译一个32位的系统上。任何指针将是有益的。

有帮助吗?

解决方案

这已经决定了你的时候libstdc++编译,通常取决于是否_GLIBCXX_USE_LFSc++config.h定义。

如果有疑问,通过您的可执行文件(或libstdc++.so,如果动态链接反对)通过readelf -r(或通过strings),看看是否您的二进制/ libstdc++针对fopen / fseek /等相连。或fopen64 / fseek64 /等

<强>更新

您不必,只要你不需要/企图fseekftell(你只是读取或写入流中。)

担心2GB限制

其他提示

如果使用的是GCC,可以采取一个GCC扩展名为__gnu_cxx :: stdio_filebuf,它关系的的iostream到一个标准的C FILE 描述符。

的优点

您需要定义以下两件事情:

  

_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;

}

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top