From: matz@... (Yukihiro Matsumoto) Date: 2003-07-26T18:12:42+09:00 Subject: [ruby-dev:20917] Re: [BUG] errno == 0 まつもと ゆきひろです In message "[ruby-dev:20915] [BUG] errno == 0" on 03/07/26, Kazuhiro Yoshida writes: |ところで1.8では$stdin(or STDIN)はIOクラスのインスタンスでないといけなく |なったんでしょうか。仮にそうだとして、IO.new には引数としてfdを渡さない |といけないとしたら、IOに結びついていないオブジェクトは設定できないという |ことになるのでしょうか。GUIコンソールをSTDINに結び付けたいのです。 問題をいくつかに分けましょう。 まず、「落ちた」原因はopenされていないfile descriptor(4)を使っ て、fdopen(3)を呼んだせいです。これはプログラムのバグと呼ん でよいでしょう。 次に[BUG]が出た理由は、どうやらWin32でのfdopen()がopenされて いないfdに対してNULLを返すのにもかかわらず、errnoを設定しな いせいです。これはWin環境固有のバグです。 それから、$stdinは1.8の現状ではread onlyの変数になっています ので、reopenするしかないですね。これが妥当かどうかについては 結論が出てなかったと思います。 そういう意味では今ならまだ間に合うタイミングだと思います。 ただ、$stdinはやっぱり$stdinですから、書き換えたり、IOでない ものが代入されたりするのは変だと思います。ということは、 $defoutに相当する変数が必要ということなのでしょうか。$defin? まつもと ゆきひろ /:|)