0
flush channelId

我们怎么知道通道被阻塞了?

谁能解释我们什么时候可以flush在 TCL 中使用该命令?

4

1 回答 1

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在写入终端时默认为,并且stderr通道始终默认为none(因为它用于在系统非常糟糕并且可能崩溃时写入消息,除其他事项外)。

于 2013-09-25T12:46:21.367 回答