程式輸出有兩種方式:一種是即時處理方式,另一種是先暫時存起來,然後再大塊寫入的方
式,前者往往造成較高的系統負擔。因此,
c語言實現通常都允許程式設計師進行實際的寫操作
之前控制產生的輸出資料量。
setbuf
(stdout, buf);
此語句通知輸入輸出庫,所有寫入到
stdout
的輸出都應該使用
buf作為輸出緩衝區,直到
buf
緩衝區被填滿或者程式設計師直接呼叫
fflush
(對於由寫操作開啟的檔案,呼叫
fflush
將導致輸
出緩衝區的內容被實際的寫入該檔案),緩衝區的大小有
中的bufsiz
定義。#include
//char buf[bufsiz];
void main()
printf("/n"); }
buf緩衝區最後一次被清空是在什麼時候?
答案是在
main
函式結束之後,作為程式交回控制給作業系統之前
c執行時庫必須進行的
理工作的一部分。區域性變數的
buf字元陣列會在
main
結束時釋放。有兩種方法可保證
buf
被清空前不被釋放:讓緩衝區成為靜態陣列(或全域性陣列)、動態分配緩衝區,如:
setbuf(stdout, malloc(bufsiz));
不必檢查
malloc
函式呼叫是否成功,因為
setbuf
函式的第二個引數取值可以為
null
,此時標準輸出不需要進行緩衝,這樣程式仍然能夠工作,只不過速度比較慢
緩衝輸出和記憶體分配
程式輸出有兩種方式 一種是即時處理方式,另一種是先暫存起來,然後再大塊寫入的方式,前者往往造成較高的系統負擔。因此,c語言實現通常都允許程式設計師進行實際的寫操作之前控制產生的輸出資料量。這種控制能力一般是通過庫函式setbuf實現的。如果buf是乙個大小適當的字元陣列,那麼 setbuf stdo...
緩衝輸出與記憶體分配(C語言陷阱)
程式處理方式有兩種,一種是即使處理,另一種是暫時存期再大塊寫入的方式,前者往往造成比較大的系統負擔,因此c語言往往允許程式猿進行實際的寫操作之前控制生產的資料量 這種控制一般由庫函式setbuf 來實現,如果buf是個大小合適的陣列,則 setbuf stdout buf 語句將通知輸入 輸出庫,所...
《C陷阱與缺陷》 緩衝輸出和記憶體分配
程式輸出有兩種方式 一種是即時處理方式,另一種是先暫存起來,然後再大塊寫入的方式,前者往往造成較高的系統負擔。因此,c語言實現通常都允許程式設計師進行實際的寫操作之前控制產生的輸出資料量。這種控制能力一般是通過庫函式 setbuf 實現的。如果 buf 是乙個大小適當的字元陣列,那麼 setbuf ...