fflush

fflush

fflush是一個計算機函式,功能是沖洗流中的信息,該函式通常用於處理磁碟檔案。fflush()會強迫將緩衝區內的數據寫回參數stream 指定的檔案中。

概述

函式名: fflush

功 能: 清除讀寫緩衝區,需要立即把輸出緩衝區的數據進行物理寫入時

頭檔案:stdio.h

原型:int fflush(FILE *stream)

其中stream是要衝洗的流

函式說明

fflush()會強迫將緩衝區內的數據寫回參數stream 指定的檔案中. 如果參數stream 為NULL,fflush()會將所有打開的檔案數據更新.

程式例子

返回值

fflush 的返回值類型是int類型,那么這個int類型具體的返回是什麼呢?

如果成功刷新,fflush返回0。指定的流沒有緩衝區或者唯讀打開時也返回0值。返回EOF指出一個錯誤。

注意:如果fflush返回EOF,數據可能由於寫錯誤已經丟失。當設定一個重要錯誤處理器時,最安全的是用setvbuf函式關閉緩衝或者使用低級I/0例程,如open、close和write來代替流I/O函式。

其他用法

fflush(stdin)刷新標準輸入緩衝區,把輸入緩衝區裡的東西丟棄[ 非標準]

fflush(stdout)刷新標準輸出緩衝區,把輸出緩衝區裡的東西列印到標準輸出設備上

printf("。。。。。。。。。。。");後面加fflush(stdout);可提高列印效率

注意事項

C和C++的標準里從來沒有定義過 fflush(stdin)。也許有人會說:“可是我用 flush(stdin) 解決了這個問題,你怎么能說是錯的呢?”的確,某些編譯器(如VC6)支持用 fflush(stdin) 來清空輸入緩衝,但是並非所有編譯器都要支持這個功能(linux下的gcc就不支持,經我的GCC4.6.2測試),因為標準中根本沒有定義fflush(stdin)。

MSDN 文檔里也清楚地寫著:

fflush on input stream is an extension to the C standard (fflush 操作輸入流是對C標準的擴充)。

以下是 C99 對 fflush 函式的定義:

int fflush(FILE *stream);

如果stream指向輸出流或者更新流(update stream),並且這個更新流最近執行的操作不是輸入,那么fflush函式將把任何未被寫入的數據寫入stream指向的檔案(如標準輸出檔案stdout)。否則,fflush函式的行為是不確定的。fflush(NULL)清空所有輸出流和上面提到的更新流。如果發生寫錯誤,flush函式會給那些流打上錯誤標記,並且返回EOF,否則返回0。

由此可知,如果 stream 指向輸入流(如 stdin),那么 fflush 函式的行為是不確定的。故而使用 fflush(stdin) 是不正確的。

相關詞條

相關搜尋

熱門詞條

聯絡我們