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
すべてのチャネルは、次の 3 つのバッファリング戦略をサポートしています。
none
— バッファリングはまったくありません。full
— 完全な出力バッファが構築されるまでバッファし (出力バッファのサイズは制御可能ですが、ほとんど変更する必要はありません)、そのバッファ全体を一度に書き込みます。line
— 出力の全行を一度に書き込めるまでバッファします。ほとんどのチャネルfull
は、バルク データを書き込むときに最高のパフォーマンスが得られるようにデフォルトで設定されますが、stdout
チャネルline
は端末に書き込むときにデフォルトで設定され、stderr
チャネルは常にデフォルトで設定されnone
ます (システムが非常に貧弱でクラッシュする可能性がある場合にメッセージを書き込むために使用されるため、とりわけ)。