From: matz@... (Yukihiro Matsumoto) Date: 2000-04-24T12:20:57+09:00 Subject: [ruby-list:22080] Re: shell interactive まつもと ゆきひろです In message "[ruby-list:22073] Re: shell interactive" on 00/04/23, 時田幸粋 writes: |スクリプト言語だから、バッファリングによる効率的なファイルシステムの利用よりも |即時性の高いバッファリング無しでのファイルシステムの利用を選んだのはわかる。 |ただ、それならなんで STDOUTは標準では sync = false なんでしょう? 必要が無いからではないかと。 |フィルタを繋ぐ事を考えると |既存のコマンド | rubyスクリプト |であれば、既存のコマンドでの標準出力の扱いで sync = true か否かはどうなるか |わからないけれど |rubyスクリプト1 | rubyスクリプト2 |の場合は rubyスクリプト1 の標準出力は sync = true の方がいい(思想的に |統一されている)気がする。 違います。一般的にsyncする必要がある状況は以下のいずれかが真 のときです。 (a) 出力先が人間(接続先がtty) (b) 出力先がネットワーク (c) 双方向通信 しかも、実は普通の実装では(a)はstdioがサポートしてくれます。 よって、一般的にSTDOUTはsync=trueにする必要は無いわけです。 一方、pipeはその想定している双方向通信においてはバッファリン グを行うとデッドロックになるので、syncする必要があります。 まつもと ゆきひろ /:|)