概念
這兩個函數(shù)均用來打開文件后爆哑,建立文件緩沖區(qū)魄眉,而不使用fopen()函數(shù)打開文件設(shè)定的默認緩沖區(qū)笛粘。
原型為:
void setbuf(FILE *stream,char *buf);
void setvbuf(FILE *stream,char *buf,int type,unsigned size);
setvbuf函數(shù)
共有四個參數(shù),
stream就是file handler;
buf就是buffer pointer,Null時郑兴,會根據(jù)buffer size自動申請一串buff space;
-
mode有三種:
- _IOFBF(buff滿了或fflush才會執(zhí)行一次IO);
- _IOLBF(出現(xiàn)new line才會執(zhí)行一次IO);
- _IONBF (無緩沖贝乎,接到一個指令執(zhí)行一次IO);
size就是申請buffer的長度情连;
setbuf函數(shù)
相當(dāng)于setvbuf的簡略版,且當(dāng)buffer滿了或者調(diào)用fflush才執(zhí)行IO览效。
buf指出的緩沖區(qū)長度由頭文件stdio.h中定義的宏BUFSIZE的值決定却舀,缺省值為512字節(jié);
當(dāng)選定buf為空時锤灿,setbuf函數(shù)將使的文件I/O不帶緩沖挽拔。
More
緩存區(qū)最后一次刷新:是在主程序完成之后,庫將控制權(quán)交回操作系統(tǒng)之前但校。
(非靜態(tài)變量或動態(tài)分配空間時篱昔,緩存區(qū)會被釋放,從而最后一次刷新內(nèi)容會丟失!V莨簟!)
#include <stdio.h>
void main(){
int c;
static char buf[BUFSIZ];
setbuf(stdout,buf);
while((c=getchar())!=EOF)
putchar(c);
}
reference
2.關(guān)于C語言里setvbuf和setbuf的疑問穗椅?
3.C陷阱與缺陷