下面是IBM報價(在C99標準還規定)爲什麼在fopen()創建的文件流的輸入和輸出操作之間需要fflush()?
當您打開一個文件進行更新,可以對所得到的數據流進行輸入和輸出 操作。但是,輸出操作 不能在沒有插入fflush子例程調用或文件定位操作 (fseek,fseeko,fseeko64,fsetpos,fsetpos64或倒帶子例程)的情況下不進行輸入操作。 此外,除非輸入操作遇到文件末尾,否則輸入操作不能直接跟隨輸出 操作而沒有介入的刷新或文件定位操作, 。
爲什麼這是必要的?
[MSDN says](https://msdn.microsoft.com/en-us/library/yeby3zcb.aspx)當指定「r +」,「w +」或「a +」訪問類型時,讀取和寫入被啓用(該文件被稱爲「更新」)。但是,從閱讀切換到書寫時,輸入操作必須遇到EOF標記。如果沒有EOF,則必須使用中間調用文件定位功能。文件定位函數是'fsetpos','fseek'和'rewind'。從寫入切換到讀取時,必須使用中間調用來調用fflush或文件定位功能。 –
請注意,上述內容在從閱讀切換到書寫時不推薦'fflush'(與IBM描述相反)。儘管MSVC實現了輸入緩衝區刷新,這是實現定義的。 –