From: Tietew Date: 2008-07-11T14:44:11+09:00 Subject: [ruby-dev:35438] Re: [ruby-cvs:25212] Ruby:r17993 (trunk): * test/ruby/envutil.rb (assert_normal_exit): finish writing script On Fri, 11 Jul 2008 14:07:49 +0900 In article <20080711134907.C1D6.C613B076@garbagecollect.jp> [[ruby-dev:35436] Re: [ruby-cvs:25212] Ruby:r17993 (trunk): * test/ruby/envutil.rb (assert_normal_exit): finish writing script] "U.Nakamura" wrote: > > いままで、windows で (3番以降の) fd が継承されないのは > > windows という OS はそういうものだからだと思っていたんですが、 > > pipe の変更を見るとよくわからなくなってきました。 > > > > じつは継承できるんでしょうか? > > 任意のファイルハンドルを継承できます。 > ここであえて「ファイルハンドル」と言っているのは、それがfdで > はないからです。 補足。ファイルに限らず、「カーネルオブジェクト」と呼ばれるもののハンドル の殆ど(詳細は知らない)が該当します。 > さて、子プロセスを生成させる場合、任意のファイルハンドルを継 > 承させるかさせないかは選べますし、 作ったあとに個々のハンドルの継承可能フラグをオンオフすることはできず、 DuplicateHandle() を使って複製する必要があります。なので、作るときに継承 可能かどうか指定するのです。 > しかし、上記の対応表を子プロセスに引き継ぐことは原則としてで > きないので、fdを継承することはできない、と言っていいと思いま > す。 このあたり、フラグ指定しないと継承可能なハンドルを作る _pipe() とか _open() って、中途半端ですよねえ。継承しても使えないのに。 -- Tietew Blog: http://www.tietew.jp/ PGP: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA