高橋征義です。

# MLメンテナンス作業おつかれさまでした!>関係者のみなさま

OHARA Shigeki <os / iij.ad.jp> wrote:
> > > >       File.open("/dev/null"){|f|
> > > >         STDIN.reopen f
> > > >         STDOUT.reopen f
> > > >         STDERR.reopen f
> > > >       }
> > > 
> > > 何か出力しようすると例外が発生しますが、いいんでしょうか。
> > 
> > う、確かに。良し悪しはともかく、何も注釈がなかったのは
> > 不親切でした(_o_)
> 
> 善し悪しの問題ではなくて、意図した通りの実装になっていないのが問題、
> ということではないでしょうか?

うーん、実はこれを書いたのは私ではないので、どういう「意図」だった
のかよくわからないのですが……(まあ確かに、出力させる気がない
のであれば、READABLEでreopenするより単にcloseするとかした方が
早いような気もするのですが)。

もしかしたら、なかださんが
[ruby-dev:22993] Re: Process.spawn & IO.popen w/o shell で書いて
いるような、ファイル名を渡した場合は現在のmodeをそのまま引き継ぐ
(で、いいんでしたよね?)、という仕様と間違えたのかも。

  [STDIN, STDOUT, STDERR].each {|io| io.reopen("/dev/null")} if close

ちなみに webrick/server.rb では明示的に"r+"してますね。

      [ STDIN, STDOUT, STDERR ].each{|io|
        io.reopen("/dev/null", "r+")
      }

高橋征義 (TAKAHASHI Masayoshi)   E-mail: maki / rubycolor.org