0

cpp referenceでは、fflush は次のように主張されています。

出力ファイル ストリームをファイルの実際の内容と同期させます。

確かに、意味がわかりません。そのコードで、fflush を取り出した場合、違いはありますか?

テストしましたが、少し違いがあるようですが、パターンが見つかりません。誰かが私のためにそれを詳細に説明できますか? 前もって感謝します。

#include<stdio.h>
int i;

int main()
{
    fork();
    for(i=0;i<1000;i++)
    {
        printf("%d\n",i);
        fflush(stdout);// without fflush, is there any difference?
    }
}
4

1 に答える 1

3

通常、改行を書き込むと、標準出力はフラッシュされます。これを適切にテストするには、ファイルを開いて書き込みます。テストを有効にするには、数個の整数よりも多くのデータを書き込む必要があります。省略fflushすると、コードが大幅に高速化されることがわかります。これら 2 つのループのタイミングを合わせてみてください...

フラッシングあり:

FILE * fp = fopen("scratch", "w");
for( int i = 0; i < 1000000; i++ ) {
    fprintf( fp, "Hello world" );
    fflush(fp);
}
fclose(fp);

フラッシングなし:

FILE * fp = fopen("scratch", "w");
for( int i = 0; i < 1000000; i++ ) {
    fprintf( fp, "Hello world" );
}
fclose(fp);

私のマシンでは、結果は次のとおりです。

With fflush:    4.57 seconds
Without fflush: 0.24 seconds
于 2013-05-22T02:19:05.817 に答える