2013-05-22 24 views
0

cpp reference,它聲稱fflush是:該代碼中沒有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? 
    } 
} 
+0

在CPP @xaxxon參考,有關於C的文件。 – Sayakiss

+0

已刪除評論。我沒有看,我只是看到了網址..你的答案在這裏。標記爲僞裝:http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin – xaxxon

+0

谷歌爲堆棧溢出printf fflush <==第一結果 – xaxxon

回答

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 
+0

無關,對於這個問題,大約有一噸的答案。 – xaxxon

+0

但這很奇怪,如果fflush需要很多時間來執行它,那麼fflush的用法是什麼? – Sayakiss

+0

'fflush'的重點是強制輸出緩衝區寫入磁盤。這就是「同步」的意思。我們緩衝的原因是因爲磁盤速度慢,可以寫入的最小數據單位是一個扇區(傳統上是512字節)。有時你不在乎,並且需要保證你輸出的所有內容都在磁盤上。 – paddy

相關問題