From: KOSAKI Motohiro Date: 2012-02-01T04:14:13+09:00 Subject: [ruby-dev:45162] Re: [ruby-trunk - Bug #5952] コマンドラインモードで CGI.new を 2 回実行すると IOError が発生する 2012年1月31日9:34 Tomoyuki Chikanaga : > > Issue #5952 has been updated by Tomoyuki Chikanaga. > > Category set to core > > r29781 以降 Kernel#readlines (ARGF.readlines) で EOF を検出すると stdin を close するようになっていたようです。以下のようなサンプルで現象を確認できます。 > > readlines.rb: > p STDIN.closed? # => false > p readlines # => [] <- Ctrl-D で EOF を送出 > p STDIN.closed? # => true > p readlines # => [] <- すぐにかえってくる > > 1.9.2 では最後の STDIN.closed? は false のままで、2度目の readlines は入力を待ちます。 > > ARGF.current_file が標準入力だったら close しないようにするととりあえずこの現象は直りました。これでどうでしょう。 経緯をよく分かっていないのですが、stdinはcloseしてはいけないけど、pipeはcloseしていいというのはなにか変な感じがします。一切closeしてはいけないのではないでしょうか