2

以前の質問での議論により、Perlがデフォルトでラインバッファ出力を提供することがわかりました。

$| = 0; # for buffered output (by default)

バッファリングされていない出力を取得する場合は、特別な変数$|を1に設定します。

$| = 1;  # for unbuffered output

今、私は、バッファリングされていない出力を好む可能性のある状況は何である可能性があるかを知りたいですか?

4

3 に答える 3

9

インタラクティブなタスクには、バッファなしの出力が必要です。つまり、誰かまたは他の何かが出力に応答することを期待しているときに、出力がバッファにスタックしたくないということです。

たとえば、STDOUTに送信されたユーザープロンプトをバッファリングしたくない場合があります。(そのため、STDOUTは、端末に接続されたときに完全にバッファリングされることはありません。ラインバッファリングのみであり、STDINからの読み取りを試みることによってバッファがフラッシュされます。)

たとえば、パイプやソケットを介して送信されたリクエストがバッファに詰まらないようにする必要があります。これは、接続のもう一方の端がそれを認識しないためです。


私が考えることができる他の唯一の理由は、パニックや信号による死などの回復不能なエラーが発生した場合に、重要なデータをバッファに残したくない場合です。

たとえば、重大な問題を診断できるようにするために、ログファイルをバッファリングしないでおくことができます。(これが、STDERRがデフォルトでバッファリングされない理由です。)

于 2011-07-03T04:40:17.933 に答える
3

ソケットまたはパイプを介して別のプログラムに書き込む場合に便利です。また、プログラムの状態をライブで監視するためにデバッグ情報をSTDOUTに書き込む場合にも役立ちます。

于 2011-07-03T04:39:32.000 に答える