■掲示板に戻る■
■過去ログ倉庫めにゅーに戻る■
バッファをフラッシュ??
- 1 名前: 名無しさん 投稿日: 2000/02/03(木) 05:12
- Perlで
$| = 1;
の意味がイマイチよくわかりません
どの本みても出力バッファを強制的にフラッシュする
と書いてありそれ以上のことはあまり書かれていません
ぶっちゃけた話どうゆうことですか?
- 2 名前: 名無しさん 投稿日: 2000/02/03(木) 05:14
- 同じスレッドに書けば?
- 3 名前: Just Another Perl User 投稿日: 2000/02/03(木) 05:41
- $| の値を 0 以外にすると、出力のバッファリングが行われなくなります。
(print/writeを実行する度にfflush(3)を呼び出すようになる。)
一般に標準出力(STDOUT)に対しては行指向のバッファリングが
行われることが多いです。("\n"が来るまでは実際の出力を行わない。)
バッファリングされている場合:
$| = 0; print "foo"; sleep 3; print "bar\n";
されていない場合:
$| = 1; print "foo"; sleep 3; print "bar\n";
を比較すると違いが分かるかと思います。
(シェルかなんかでperl実行してください。)
- 4 名前: 1 投稿日: 2000/02/03(木) 16:45
- >3
う〜んwindowsでは違いがよくわかりません・・・
foo...(sleep)...bar ←$|=1
(sleep)...foobar ←$|=0
こうなるってことですか?
- 5 名前: Just Another Perl User 投稿日: 2000/02/03(木) 22:59
- 4の方へ:
その通り。標準出力のバッファリングを行う場合は大抵の実装で、
"\n" (改行) が来るまで画面に表示されなくなります。
だから $| = 1 にすると、上記のような振る舞いになります。
(既定値は $| = 0, ie. バッファリングする。)
- 6 名前: 1 投稿日: 2000/02/03(木) 23:09
- >Just Another Perl Userさん
なんとなくわかったような気がします
とりあえず$| = 1;はつけておいた方がよさそうですね
ありがとうございました