flush channelId
我们怎么知道频道被阻止了?
任何人都可以解释我们何时可以在TCL中使用flush
命令?
答案 0 :(得分:4)
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
- 缓冲区,直到可以一次写入整行输出。大多数频道默认为full
,因为这样可以在撰写批量数据时获得最佳效果,但stdout
频道在写入终端时默认为line
,{{1} } channel 总是默认为stderr
(因为它用于在系统非常糟糕时写入消息,并且可能会崩溃等等。)