?
本文檔使用 PHP中文網手冊 發(fā)布
在頭文件<stdio.h>中定義 | ||
---|---|---|
void setbuf(FILE * stream,char * buffer); | (直到C99) | |
void setbuf(FILE * restrict stream,char * restrict buffer); | (自C99以來) |
設置內部緩沖區(qū)以用于流操作。它應該至少是BUFSIZ
字符長。
如果buffer
不為null,則相當于setvbuf(stream, buffer,
_IOFBF,
BUFSIZ)
。
如果buffer
為空,相當于setvbuf(stream,
NULL,
_IONBF, 0)
關閉緩沖。
流 | - | 要設置緩沖區(qū)的文件流 |
---|---|---|
緩沖 | - | 指向要使用的流的緩沖區(qū)。如果提供NULL,則關閉緩沖 |
沒有。
如果BUFSIZ
不是合適的緩沖區(qū)大小,setvbuf
可以用來改變它。
setvbuf
也應該用來檢測錯誤,因為setbuf
不表示成功或失敗。
此功能可后方可使用stream
已經以開放的文件相關聯(lián),但任何其他操作之前(除了一個失敗的呼叫setbuf
/ setvbuf
)。
一個常見的錯誤是將stdin或stdout的緩沖區(qū)設置為在程序終止之前其生命周期結束的數組:
int main(void) { char buf[BUFSIZ]; setbuf(stdin, buf);} // lifetime of buf ends, undefined behavior
可以使用setbuf在需要立即輸出的流上禁用緩沖。
#include <stdio.h>#include <threads.h> int main(void){ setbuf(stdout, NULL); // unbuffered stdout putchar('a'); // 'a' appears immediately if stdout is unbuffered thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // sleep 1 sec putchar('b'); }
輸出:
ab
C11標準(ISO / IEC 9899:2011):
7.21.5.5 setbuf函數(p:307-308)
C99標準(ISO / IEC 9899:1999):
7.19.5.5 setbuf函數(p:273)
C89 / C90標準(ISO / IEC 9899:1990):
4.9.5.5 setbuf函數