flush channelId
我们怎么知道通道被阻塞了?
谁能解释我们什么时候可以flush
在 TCL 中使用该命令?
该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
(因为它用于在系统非常糟糕并且可能崩溃时写入消息,除其他事项外)。