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, '\0', sizeof( buff )); fprintf(stdout, "Going to set full buffering on "); setvbuf(stdout, buff, _IOFBF, 1024); fprintf(stdout, "This is gitbook.net "); 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 gitbook.net This output will go into buff and this will appear when programm will come after sleeping 5 seconds