TCL:'flush'命令的用法

时间:2013-09-25 10:37:58

标签: tcl

flush channelId

我们怎么知道频道被阻止了?

任何人都可以解释我们何时可以在TCL中使用flush命令?

1 个答案:

答案 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(因为它用于在系统非常糟糕时写入消息,并且可能会崩溃等等。)