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会导致代码显着加快。尝试定时这两个循环...

带冲洗:

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 回答