2014-02-27 35 views
2

我很困惑,寫入過程如何進行C.所以我有一個字符串,s,我想寫入輸出。要做到這一點,我使用fputs:fputs和fflush,寫入和緩衝過程

fputs(s, stdout); 

但顯然這不寫入輸出,而只是收集數據寫入?在哪裏收集到的?所以我必須等到程序退出或直到我調用fflush(),直到輸出實際寫入標準輸出爲止?我對嗎?

+1

有時輸出不會刷新,直到寫入'\ n'行末尾。 –

+0

@PauloBu對於printf而言,這是正確的,而不是fputs。 – Zaffy

+0

@Zaffy點,我認爲它可能是類似的。 –

回答

2

C標準IO流操作在三種模式之一:

  1. 全緩衝
  2. 行緩衝
  3. 無緩衝

可以設置與setvbuf()功能的模式。這一切都發生在標準IO實施的內部深處。如果您希望數據立即顯示,請使用無緩衝模式。

從C99 7.19.3#3引用:

當流是無緩衝,字符旨在儘快從 源或目的地出現。否則字符可能是 積累並作爲一個塊傳入或傳出主機環境。當一個 流是完全緩衝,當填充緩衝區時,字符旨在作爲一個塊在主機環境中發送或從主機環境發送到 。當一個數據流是行 緩存,當遇到換行字符時,打算將字符作爲塊傳輸到主機或從主機 環境中傳輸。此外, 字符旨在作爲一個塊傳輸到主機環境 當填充緩衝區,當在非緩衝流上請求輸入時,或者 當在需要傳輸 字符的傳輸線緩衝流上請求輸入時來自主機環境。對這些特性的支持是 實現定義的,並可能通過setbufsetvbuf函數受到影響。