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