NAME
fflush - flush a stream
SYNOPSIS
#include <stdio.h>
int fflush(FILE *stream);
DESCRIPTION
For output streams, fflush() forces a write of all user-space buffered data for the given output or update stream via the stream's underlying write function.
For input streams, fflush() discards any buffered data that has been fetched from the underlying file, but has not been consumed by the application. The open status of the stream is unaffected.
如果給出的文件流是一個輸出流,那么fflush()把輸出到緩沖區的內容寫入文件. 如果給出的文件流是輸入類型的,那么fflush()會清除輸入緩沖區。
fflush()在調試時很實用,特別是對於在程序中輸出到屏幕前發生錯誤片段時. 直接調用 fflush( STDOUT )輸出可以保證你的調試輸出可以在正確的時間輸出.
If the stream argument is NULL, fflush() flushes all open output streams.
For a nonlocking counterpart, see unlocked_stdio(3).
1.
flush(stdin)刷新標准輸入緩沖區,把輸入緩沖區里的東西丟棄
fflush(stdout)刷新標准輸出緩沖區,把輸出緩沖區里的東西打印到標准輸出設備上。
2.
fflush的真正作用就是立即將緩沖區中的內容輸出到設備。正因為這樣,所以只能在寫入文件的時候使用fflush。在讀取文件時使用fflush是不好的編程方法,因為那樣的代碼在一些環境下可能正常工作,但在另一些環境下則會出錯,這導致程序不可移植。
flush即清空緩沖,在慢速設備上使用緩存是一種提升數據處理效率的手段,flush的作用是將內存中緩沖的內容實際寫入外存媒介
詳見MSDN的Kernel32!FlushFileBuffers
fclose后未必會flush一次的,操作系統會在CPU空閑的時候執行flush
3.
fflush不應該在讀取文件的時候用,而應該在寫入文件的時候用。
fflush會清空緩沖區,fclose在關閉文件之前也會清空緩沖區。如果使用exit函數退出程序,或者main函數返回,則所有打開后沒有關閉的文件會自動關閉,關閉時也會清空緩沖區。
通常,只有在程序非正常結束的情況下,緩沖區才不會被清除。
參考
fflush 函數 http://blog.chinaunix.net/uid-21651805-id-3482290.html
fflush函數有什么作用? http://blog.csdn.net/stpeace/article/details/9063293