2013-09-25 41 views
-1
flush channelId 

我們怎樣才能知道通道被阻塞?TCL:使用'flush'命令

任何人都可以解釋我們什麼時候可以在TCL中使用flush命令?

+2

您是否閱讀過文檔[here](http://www.tcl.tk/man/tcl8.4/TclCmd/flush.htm)和[here](http://www.tcl.tk/man) /tcl8.4/TclCmd/fconfigure.htm)? – TheCodeArtist

+0

您知道通道在備份和溢出時被阻塞。當您通過管道移動大包時,這尤其是個問題。 –

+0

此外,你應該考慮開始[接受](http://stackoverflow.com/help/accepted-answer)你的問題的答案:) – Jerry

回答

3

flush命令指示Tcl確保其通道的所有緩衝輸出立即寫入底層操作系統。你幾乎不需要明確地使用flush;主要的例外是當你提示輸入用戶不使用新行:

puts -nonewline "Please enter your name: " 
flush stdout 
set name [gets stdin] 

但是,如果您有沖洗出於其他原因的問題,您真正需要使用fconfigure更改默認的輸出緩衝區經營策略:

# Turn off output buffering 
fconfigure $channel -buffering none 

每個通道支持三種緩衝策略:

  • none - 無緩衝可言。
  • full - 緩衝區,直到建立完整的輸出緩衝區(輸出緩衝區的大小是可控的,但您幾乎不需要觸摸它),然後立即寫入整個緩衝區。
  • line - 緩衝區,直到一整行輸出可以一次寫入。 總是缺省書寫時大量數據,但stdout通道默認爲line寫入終端時,並且stderr通道none(因爲它是用來

大多數通道默認full爲能提供最佳性能用於在系統非常差並且可能崩潰等情況下編寫消息)。

+0

在緩衝區標準輸出和標準輸入不會佔用不同的內存。如果它們佔用不同的內存,則不需要衝洗輸出緩衝區。因爲我們在這裏有兩個不同的存儲位置。是這樣嗎? – user2720323

+0

緩衝區將看起來像2路?或單一? – user2720323