如果我做stdout
流的dup
(爲了以後使用它),使stdout
流freopen
到該文件,然後printf("data")
,該文件不立即用數據進行更新。只有在執行fflush(stdout)
後纔會更新。標準輸出重定向
fflush(stdout)
有一些額外的副作用嗎?
有沒有一些更優雅的方式來做到這一點?
如果我做stdout
流的dup
(爲了以後使用它),使stdout
流freopen
到該文件,然後printf("data")
,該文件不立即用數據進行更新。只有在執行fflush(stdout)
後纔會更新。標準輸出重定向
fflush(stdout)
有一些額外的副作用嗎?
有沒有一些更優雅的方式來做到這一點?
您可以使用一個C89的呼叫號碼setvbuf()
,以避免與fflush()
的混淆您的代碼。或者也許包裝setlinebuf()
。
但上述所有隻是刷新緩衝區。您可能需要使用fsync()
。
這是緩衝I/O中的正常行爲。沒有什麼奇怪的事情發生在同花順。
但是,在這種情況下,你不應該搞亂stdout。用fopen
打開你的文件,你會得到一個FILE
指針。在fprintf
等函數中使用此指針直接在其中打印,如果需要立即結果,請將其刷新。完成後請不要忘記用fclose
關閉文件。
他可能沒有調用printf的部件的源代碼。 –
編輯:參見例如http://stackoverflow.com/q/7145134/318716 –
另一個編輯:請參閱http://stackoverflow.com/questions/2340610/difference-between-fflush-and-fsync/2340641#2340641爲'fflush' vs'fsync '。 –
使用帶'_IOLBF'的'setvbuf()'通常就足夠了 - 除非你有非常特殊的要求。 –