fflush

fflush

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

基本介紹

  • 外文名:fflush
  • 頭檔案:stdio.h
  • 原型:int fflush(FILE *stream)
  • 功 能清除讀寫緩衝區
概述,函式說明,程式例子,返回值,其他用法,注意事項,

概述

函式名: fflush
功 能: 清除讀寫緩衝區,需要立即把輸出緩衝區的數據進行物理寫入時
頭檔案:stdio.h
原型:int fflush(FILE *stream)
其中stream是要衝洗的流

函式說明

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

程式例子

#include<string.h>#include<stdio.h>#include<conio.h>#include<io.h>void flush(FILE *stream);int main(void){FILE *stream;char msg[]="Thisisatest";/*createafile*/stream=fopen("DUMMY.FIL","w");/*writesomedatatothefile*/fwrite(charmsg,strlen(charmsg),1,stream);clrscr();printf("PressanykeytoflushDUMMY.FIL:");getch();/*flushthedatatoDUMMY.FILwithout\closingit*/flush(stream);printf("\nFilewasflushed,Pressanykey\toquit:");getch();return0;}void flush(FILE* stream){int duphandle;/*flushthestream'sinternalbuffer*/fflush(stream);/*makeaduplicatefilehandle*/duphandle=dup(fileno(stream));/*closetheduplicatehandletoflushtheDOSbuffer*/close(duphandle);}

返回值

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) 是不正確的。

相關詞條

熱門詞條

聯絡我們