2011-10-15 105 views
1

如果我做stdout流的dup(爲了以後使用它),使stdoutfreopen到該文件,然後printf("data"),該文件不立即用數據進行更新。只有在執行fflush(stdout)後纔會更新。標準輸出重定向

fflush(stdout)有一些額外的副作用嗎?

有沒有一些更優雅的方式來做到這一點?

回答

1

您可以使用一個C89的呼叫號碼setvbuf(),以避免與fflush()的混淆您的代碼。或者也許包裝setlinebuf()

但上述所有隻是刷新緩衝區。您可能需要使用fsync()

+0

編輯:參見例如http://stackoverflow.com/q/7145134/318716 –

+0

另一個編輯:請參閱http://stackoverflow.com/questions/2340610/difference-between-fflush-and-fsync/2340641#2340641爲'fflush' vs'fsync '。 –

+0

使用帶'_IOLBF'的'setvbuf()'通常就足夠了 - 除非你有非常特殊的要求。 –

2

這是緩衝I/O中的正常行爲。沒有什麼奇怪的事情發生在同花順。

但是,在這種情況下,你不應該搞亂stdout。用fopen打開你的文件,你會得到一個FILE指針。在fprintf等函數中使用此指針直接在其中打印,如果需要立即結果,請將其刷新。完成後請不要忘記用fclose關閉文件。

+0

他可能沒有調用printf的部件的源代碼。 –

相關問題