4

Linux マシンで c++ の fopen、fwrite、fflush、fclose 関数を使用して約 4 GB のファイルを作成しようとしましたが、fclose() 関数がファイルを閉じるのに非常に長い時間がかかり、約 (40 ~ 50 秒) かかることがわかりました。この遅さの理由を見つけるために別のフォーラムをチェックし、フォーラムで提案されているようにコードを変更しました。それでも問題を解決できませんでした。

        totalBytes = 4294967296 // 4GB file
        buffersize = 2000;    
        while ( size <= totalBytes )
        {
            len = fwrite(buffer, 1, bufferSize, fp);
            if ( len != bufferSize ) {
                cout<<"ERROR (Internal): in calling ACE_OS::fwrite() "<<endl;
                ret = -1;
            }
            size = size + len;
        }
        ...
        ...
        ...
        fflush(fp);
        flcose(fp);

上記の問題に対する解決策は非常に役立ちます。

ありがとう、ラメッシュ

4

4 に答える 4

5

オペレーティング システムはディスクへの実際の書き込みを延期しており、書き込み操作またはfflush().

のマニュアルページをfflush()見て、次のメモを見ました。

fflush() は、C ライブラリによって提供されるユーザー空間バッファーのみをフラッシュすることに注意してください。データが物理的にディスクに保存されるようにするには、カーネル バッファもフラッシュする必要があります。たとえば、sync(2) または fsync(2) を使用します。

fclose()( Linuxシステムでの動作は異なるようですが、同様のメモがあります)

于 2012-08-22T18:19:57.783 に答える
4

その量のデータをディスクに書き込むには長い時間がかかり、その事実を回避する方法はありません。

于 2012-08-22T18:04:00.087 に答える
1

fopen/fwrite/fclose は、低レベルのオープン/書き込み/クローズの C 標準ラッパーです。fflush が行っているのは、バッファリングされたものに対してすべての「書き込み」呼び出しが行われたことを確認することだけです。フラッシュには「同期点」はありません。オペレーティング システムは、'close' が戻ることを許可する前に、書き込みバッファをフラッシュしています。

于 2012-08-22T18:12:38.563 に答える