iostream、大きなファイルがサポート
-
20-08-2019 - |
質問
ん段階では明確にお答えできないように思う人がいるかもしれん。
の開発をしている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
だからの読み込みや書き込みのストリームです。)
他のヒント
は、標準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;
}