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

すべてのチャネルは、次の 3 つのバッファリング戦略をサポートしています。

  • none— バッファリングはまったくありません。
  • full— 完全な出力バッファが構築されるまでバッファし (出力バッファのサイズは制御可能ですが、ほとんど変更する必要はありません)、そのバッファ全体を一度に書き込みます。
  • line— 出力の全行を一度に書き込めるまでバッファします。

ほとんどのチャネルfullは、バルク データを書き込むときに最高のパフォーマンスが得られるようにデフォルトで設定されますが、stdoutチャネルlineは端末に書き込むときにデフォルトで設定され、stderrチャネルは常にデフォルトで設定されnoneます (システムが非常に貧弱でクラッシュする可能性がある場合にメッセージを書き込むために使用されるため、とりわけ)。

于 2013-09-25T12:46:21.367 に答える