C庫函數(shù) int setvbuf(FILE *stream, char *buffer, int mode, size_t size) 定義了如何流應該被緩沖。
下面是函數(shù)setvbuf()函數(shù)的聲明。
int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
stream -- 這是一個文件對象標識一個開放的流指針。
buffer -- 這是用戶分配的緩沖區(qū)。如果設(shè)置為NULL,該函數(shù)會自動分配一個指定大小的緩沖區(qū)。
mode -- 此指定文件緩沖模式:
| mode | 描述 |
|---|---|
| _IOFBF | Full buffering: 在輸出時,數(shù)據(jù)被寫入一旦緩沖區(qū)已滿。在輸入緩沖區(qū)填滿時,輸入操作要求和緩沖區(qū)是空的。 |
| _IOLBF | Line buffering: 在輸出時,數(shù)據(jù)被寫入到流或緩沖區(qū)滿時,無論發(fā)生什么事時,當插入一個換行符。在輸入緩沖區(qū)充滿時要求輸入操作,直到下一個換行符,緩沖區(qū)為空。 |
| _IONBF | No buffering: 不使用緩沖區(qū)。每個I/O操作,盡快寫入。緩沖區(qū)和大小的參數(shù)將被忽略。 |
size -- 這是一個緩沖區(qū)的大小(以字節(jié)為單位)
這個函數(shù)返回其他成功返回0,則返回非零值。
下面的例子顯示了函數(shù)setvbuf()函數(shù)的用法。
#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 yiibai.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); }
讓我們編譯和運行上面的程序,這將產(chǎn)生以下結(jié)果。在這里,程序保持緩沖到輸出的buff,直到它面臨的第一次調(diào)用到fflush() 后,再次開始緩沖輸出,,終于睡5秒鐘。發(fā)送剩余的輸出到標準輸出程序出來之前。
Going to set full buffering on This is yiibai.com This output will go into buff and this will appear when programm will come after sleeping 5 seconds