?
This document uses PHP Chinese website manual Release
在頭文件<stdio.h>中定義 | ||
---|---|---|
void setbuf(FILE * stream,char * buffer); | (直到C99) | |
void setbuf(FILE * restrict stream,char * restrict buffer); | (自C99以來(lái)) |
設(shè)置內(nèi)部緩沖區(qū)以用于流操作。它應(yīng)該至少是BUFSIZ
字符長(zhǎng)。
如果buffer
不為null,則相當(dāng)于setvbuf(stream, buffer,
_IOFBF,
BUFSIZ)
。
如果buffer
為空,相當(dāng)于setvbuf(stream,
NULL,
_IONBF, 0)
關(guān)閉緩沖。
流 | - | 要設(shè)置緩沖區(qū)的文件流 |
---|---|---|
緩沖 | - | 指向要使用的流的緩沖區(qū)。如果提供NULL,則關(guān)閉緩沖 |
沒(méi)有。
如果BUFSIZ
不是合適的緩沖區(qū)大小,setvbuf
可以用來(lái)改變它。
setvbuf
也應(yīng)該用來(lái)檢測(cè)錯(cuò)誤,因?yàn)?code>setbuf不表示成功或失敗。
此功能可后方可使用stream
已經(jīng)以開(kāi)放的文件相關(guān)聯(lián),但任何其他操作之前(除了一個(gè)失敗的呼叫setbuf
/ setvbuf
)。
一個(gè)常見(jiàn)的錯(cuò)誤是將stdin或stdout的緩沖區(qū)設(shè)置為在程序終止之前其生命周期結(jié)束的數(shù)組:
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標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.21.5.5 setbuf函數(shù)(p:307-308)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.19.5.5 setbuf函數(shù)(p:273)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.9.5.5 setbuf函數(shù)