fflush
清除資料流。
int fflush(
FILE *stream
);
參數
- stream
指標FILE結構。
傳回值
fflush如果已成功清除緩衝區,則傳回 0。在指定的資料流已無緩衝區,或開啟只供讀取的情況下,也會傳回值為 0。傳回值為EOF表示發生錯誤。
注意事項 |
---|
如果fflush會傳回EOF,資料可能已遺失,因為寫入失敗。設定時的嚴重錯誤處理常式,它是最安全的作法關閉緩衝處理與setvbuf函式或使用低階 I/O 常式,例如_open, _close,以及_write而非資料流 I/O 函式。 |
備註
fflush函式會清除資料流。如果該檔案相關聯stream正在開啟進行輸出, fflush寫入該檔案相關聯的資料流緩衝區的內容。如果資料流開啟以供輸入, fflush清除緩衝區的內容。fflush取消任何先前呼叫效果ungetc針對stream。此外, fflush(NULL)會清除所有的資料流開啟以供輸出。在呼叫之後,資料流仍然開啟。fflush沒有任何作用,在未緩衝處理的資料流。
緩衝區通常定義檔案由作業系統,決定資料會自動寫入磁碟的最佳時機: 當緩衝區已滿時、 當關閉資料流,或當程式正常終止而毋需關閉資料流。執行階段程式庫的 [認可到磁碟] 功能可讓您確保重要資料會直接存到磁碟,而不是作業系統緩衝區以寫入。不需重新撰寫現有程式,您可以藉由連結與 COMMODE.OBJ 程式的目的檔啟用此功能。在產生的可執行檔中,呼叫_flushall寫入磁碟中的所有緩衝區的內容。只有_flushall和fflush受到 COMMODE.OBJ。
控制認可到磁碟] 功能的相關資訊,請參閱資料流 I/O, fopen,以及 _fdopen。
這個函式呼叫的執行緒會鎖定,所以是安全執行緒。非鎖定版本,請參閱_fflush_nolock。
需求
Function |
所需的標頭 |
---|---|
fflush |
<stdio.h> |
其他的相容性資訊,請參閱相容性在簡介中。
範例
// crt_fflush.c
#include <stdio.h>
#include <conio.h>
int main( void )
{
int integer;
char string[81];
// Read each word as a string.
printf( "Enter a sentence of four words with scanf: " );
for( integer = 0; integer < 4; integer++ )
{
scanf_s( "%s", string, sizeof(string) );
printf( "%s\n", string );
}
// You must flush the input buffer before using gets.
// fflush on input stream is an extension to the C standard
fflush( stdin );
printf( "Enter the same sentence with gets: " );
gets_s( string, sizeof(string) );
printf( "%s\n", string );
}
這是測試 這是測試
這是測試 這是測試 輸入含有 scanf 的四個單字的句子: 這是測試 這個 是 a Test - 測試 輸入與取得同一個句子: 這是測試 這是測試