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/Ofopen,以及 _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 - 測試
輸入與取得同一個句子: 這是測試
這是測試

.NET Framework 對等用法

System::IO::FileStream::Flush

請參閱

參考

資料流 I/O

fclose _fcloseall

_flushall

setvbuf