質問

ん段階では明確にお答えできないように思う人がいるかもしれん。

の開発をしているC++アプリに使用さ4.xとLinux(32-bitプしていきます。このアプリのニーズを読むことのできるファイル>2GBます。

よりお問い合わせくだ使iostreamも対ファイルポインタが見つからなる場合にはファイル#定義(_LARGEFILE_SOURCE,_LARGEFILE64_SOURCE,_FILE_OFFSET_BITS=64)として動作するときにのみ有効にiostreamンターフェースの通称です。

私の作成の32ビットのシステム。任意のポインタもご提供いただきました。

役に立ちましたか?

解決

このことが既に決まっていますが libstdc++ ため、通常かどうか _GLIBCXX_USE_LFS たに定義され c++config.h.

が疑われるような場合には実行ファイル(または libstdc++.so, 場合、リンクする技術を開発しているので動的に) readelf -r (または strings まだバイナリー/libstdc++ リンクに対し fopen/fseekすることになりました。または fopen64/fseek64することになりました。

更新

んよりも2GBに限してい/う fseek または ftell だからの読み込みや書き込みのストリームです。)

他のヒント

あなたはGCCを使用している場合は、

は、標準C のファイルの記述子にのIOStreamを結びつける__gnu_cxx :: stdio_filebuf、と呼ばれるGCCの拡張機能を利用することができます。

あなたは、次の二つのことを定義する必要があります:

  

_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