TCL:使用"刷新"命令


flush channelId

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

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

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

相关内容

  • 没有找到相关文章

最新更新