没有fflush在代码中有什么区别吗?

时间:2013-05-22 02:12:17

标签: c multithreading fflush

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?
    }
}

1 个答案:

答案 0 :(得分:3)

标准输出通常在您写入换行符时刷新。如果要正确测试,请打开文件并写入。为了使测试有用,您将不得不编写比仅仅几个整数更多的数据。您应该发现省略fflush将导致代码明显加快。尝试计时这两个循环......

冲洗:

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