1 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
C99標(biāo)準(zhǔn)沒有規(guī)定三個(gè)標(biāo)準(zhǔn)流是否是無緩沖的或行緩沖的:這取決于實(shí)現(xiàn)。我知道的所有UNIX實(shí)現(xiàn)都有一個(gè)緩沖行stdin
。在Linux上,stdout
在行緩沖和stderr
無緩沖。
據(jù)我所知,POSIX沒有施加額外的限制。POSIX的fflush頁(yè)面在示例部分中做了注釋:
[...]使用fflush()函數(shù)是因?yàn)闃?biāo)準(zhǔn)輸出通常是緩沖的,并且提示可能不會(huì)立即打印在輸出或終端上。
所以你添加的評(píng)論fflush(stdout);
是正確的。
另一種方法是使stdout
無緩沖:
setbuf(stdout, NULL);/* or */setvbuf(stdout, NULL, _IONBF, 0);
但正如R.所說,你只能這樣做一次,而且必須在你寫信stdout
或執(zhí)行任何其他操作之前。(C99 7.19.5.5 2)
我剛剛看了一個(gè)最近的線程上comp.lang.c
同樣的事情。其中一個(gè)評(píng)論:
Unix約定是,
stdin
和stdout
當(dāng)與終端相關(guān)聯(lián),和全緩沖(又名塊緩沖)否則都行緩沖。stderr
總是沒有緩沖。
添加回答
舉報(bào)