第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

stdout行默認(rèn)是緩沖,無緩沖還是不確定?

stdout行默認(rèn)是緩沖,無緩沖還是不確定?

stdout行默認(rèn)是緩沖,無緩沖還是不確定?段7.9.13/7的c99規(guī)定:在程序啟動(dòng)時(shí),預(yù)定義了三個(gè)文本流,無需明確打開 - 標(biāo)準(zhǔn)輸入(用于讀取傳統(tǒng)輸入),標(biāo)準(zhǔn)輸出(用于寫入常規(guī)輸出)和標(biāo)準(zhǔn)錯(cuò)誤(用于寫入診斷輸出)。最初打開時(shí),標(biāo)準(zhǔn)錯(cuò)誤流未完全緩沖; 當(dāng)且僅當(dāng)可以確定流不參考交互設(shè)備時(shí),標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出流被完全緩沖。這是有道理的。如果您將標(biāo)準(zhǔn)輸出推送到文件,則需要將其完全緩沖以提高效率。但是,當(dāng)你無法確定設(shè)備是非交互式的(即正常輸出到終端)時(shí),我在標(biāo)準(zhǔn)中沒有提到輸出是線路緩沖還是無緩沖。我問的原因是我在這里回答我應(yīng)該fflush(stdout);在兩個(gè)陳述之間插入一個(gè):printf ("Enter number> ");// fflush (stdout); needed ?if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }因?yàn)槲覜]有printf用換行符終止。任何人都可以清除這個(gè)嗎?
查看完整描述

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約定是,stdinstdout當(dāng)與終端相關(guān)聯(lián),和全緩沖(又名塊緩沖)否則都行緩沖。stderr總是沒有緩沖。


查看完整回答
反對(duì) 回復(fù) 2019-07-23
  • 1 回答
  • 0 關(guān)注
  • 954 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)