From: Tanaka Akira Date: 2003-03-20T16:28:26+09:00 Subject: [ruby-dev:19860] Re: IO#initialize is not called from IO.pipe and IO.popen In article <1048144077.350545.2026.nullmailer@picachu.netlab.jp>, matz@ruby-lang.org (Yukihiro Matsumoto) writes: > ですから、pipeとpopenでなにをinitializeに渡すべきか決められ > れば呼ぶようにすることができると思います。なかださんがパッチ > を用意したようにfile descriptorの数値がよいですか? (Unix なら) pipe はそれでいいと思います。 popen は少し厄介です。これは close 時に wait するために pid が必要なの で。まぁ、IO オブジェクトを作った後に private な pid= を使って後から設 定するあたりが適切なのかも知れません。 あと、f2 は socketpair を利用してそもそも使わないということで。 そして、残る問題は非 Unix 環境です。私には判断できないんですが、file descriptor の数値で済むんでしょうかねぇ? ただ、私が作っていたもの (nonstdio) では、すでに initialize でひっかけ るのはあきらめて読み書きの各メソッドの先頭で初期化済かどうか検査するよ うにしてしまいました。pipe や popen 以外に socket もいじくらないといけ なかったし、ARGF (が内部で使う IO) にいたってはひっかけようがなかった ので。 まぁ、いつか stdio を捨てるときには FILE が使えなくなるので、今回の厄 介な話(popen)はいずれにしてもどうにかしなきゃいけないわけですが。 -- [田中 哲][たなか あきら][Tanaka Akira]