From: Tanaka Akira Date: 2005-01-01T18:21:08+09:00 Subject: [ruby-dev:25380] Re: FileUtils.copy_stream(ARGF, STDOUT) In article <20050101162627F.aamine@loveruby.net>, Minero Aoki writes: > ARGF は受け付けられるべきだと思うので、考えかたを変更し、 > src.read と dest.write があれば OK ということにしました。 > なお src.read および dest.write は copy_stream 実行中には > 例外を発生しないことを想定しています (書いてませんが)。 後から気がついたのですが、read を使うと、出力が遅延することがあります。 つまり、以前は、 % ruby -v -rfileutils -e 'FileUtils.copy_stream(STDIN, STDOUT)' ruby 1.9.0 (2004-12-29) [i686-linux] a # 入力 a b # 入力 b c # 入力 c d # 入力 d というように入力が即座に出て来たのが、 % ./ruby -v -rfileutils -e 'FileUtils.copy_stream(STDIN, STDOUT)' ruby 1.9.0 (2005-01-01) [i686-linux] a # 入力 b # 入力 c # 入力 d # 入力 a b c d というように EOF がくるか入力がある程度たまるかするまで出力に出て来な いようになりました。 (上の例で " # 入力" というのは入力の一部ではありません。) これを避けるには sysread か readpartial をつかえばよいのですが、 sysread は ARGF と nonblocking mode の問題があるので readpartial を... といいたいところですが ARGF.readpartial はまだ実装していないのでうまく ないようです。うぅむ。 まぁ、FileUtils.copy_stream が readpartial を使うかどうかはともかく、 ARGF.readpartial はこれを機会に実装することにします。 -- [田中 哲][たなか あきら][Tanaka Akira]