setvbuf() - C語言庫函式


C庫函式 int setvbuf(FILE *stream, char *buffer, int mode, size_t size) 定義了如何流應該被緩衝。

宣告

下面是函式setvbuf()函式的宣告。

int setvbuf(FILE *stream, char *buffer, int mode, size_t size)

引數

  • stream -- 這是一個檔案物件標識一個開放的流指標。

  • buffer -- 這是使用者分配的緩衝區。如果設定為NULL,該函式會自動分配一個指定大小的緩衝區。

  • mode -- 此指定檔案緩衝模式:

mode 描述
_IOFBF Full buffering: 在輸出時,資料被寫入一旦緩衝區已滿。在輸入緩衝區填滿時,輸入操作要求和緩衝區是空的。
_IOLBF Line buffering: 在輸出時,資料被寫入到流或緩衝區滿時,無論發生什麼事時,當插入一個換行符。在輸入緩衝區充滿時要求輸入操作,直到下一個換行符,緩衝區為空。
_IONBF No buffering: 不使用緩衝區。每個I/O操作,盡快寫入。緩衝區和大小的引數將被忽略。
  • size -- 這是一個緩衝區的大小(以位元組為單位)

返回值

這個函式返回其他成功返回0,則返回非零值。

例子

下面的例子顯示了函式setvbuf()函式的用法。

#include <stdio.h>

int main()
{

   char buff[1024];

   memset( buff, '', sizeof( buff ));

   fprintf(stdout, "Going to set full buffering on
");
   setvbuf(stdout, buff, _IOFBF, 1024);

   fprintf(stdout, "This is tw511.com
");
   fprintf(stdout, "This output will go into buff
");
   fflush( stdout );

   fprintf(stdout, "and this will appear when programm
");
   fprintf(stdout, "will come after sleeping 5 seconds
");

   sleep(5);

   return(0);
}

讓我們編譯和執行上面的程式,這將產生以下結果。在這裡,程式保持緩衝到輸出的buff,直到它面臨的第一次呼叫到fflush() 後,再次開始緩衝輸出,,終於睡5秒鐘。傳送剩餘的輸出到標準輸出程式出來之前。

Going to set full buffering on
This is tw511.com
This output will go into buff
and this will appear when programm
will come after sleeping 5 seconds