7

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

我正在 Linux(32 位操作系统)上使用 GCC 4.x 开发 C++ 应用程序。此应用程序需要能够读取大小 > 2GB 的文件。

我真的很想使用 iostream 的东西与 FILE 指针,但我找不到大文件 #defines (_LARGEFILE_SOURCE, _LARGEFILE64_SOURCE, _FILE_OFFSET_BITS=64) 是否对 iostream 标头有任何影响。

我在 32 位系统上编译。任何指针都会有所帮助。

4

2 回答 2

8

这在编译时已经为您确定了libstdc++,通常取决于是否_GLIBCXX_USE_LFSc++config.h.

如果有疑问,请通过(或通过)传递您的可执行文件(或者libstdc++.so,如果动态链接它)并查看您的二进制文件/是否链接到/ /etc。或/ /等。readelf -rstringslibstdc++fopenfseekfopen64fseek64

更新

只要您不需要/尝试fseekftell(您只需读取或写入流),您就不必担心 2GB 的限制。

于 2009-03-19T01:23:14.273 回答
2

如果您使用的是 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;

}

于 2009-03-19T02:08:31.013 回答