From: "H.Yamamoto" Date: 2005-08-19T12:36:31+09:00 Subject: [ruby-dev:26832] Re: cannot check EOF of pipe on windows 山本です。 >| 途切れるので、flush が関係してるんでしょうか。 > >問題のエラーになってる時に、rb_w32_read()で0を返すようにして >ますけど、それが非常にまずいんじゃないかという気はちらほらし >ます。 > >って、trap関連処理はまだ入れてないなあ。その辺かしら... 何度か実行してると、時々結果が変わることに気づきました。 タイミングの問題なんでしょうか。 E:\ruby-cvs\bcc32>ruby -v \z.rb ruby 1.9.0 (2005-08-18) [i386-bccwin32] "1" false "\n" true E:\ruby-cvs\bcc32>ruby -v \z.rb ruby 1.9.0 (2005-08-18) [i386-bccwin32] "1" false "\n" false "x" false "y" true いくつか気になった点があったので試したものの、うまくいきませんでした。 bcc32 はよくエラーなのに errno を変更しないことがあるので、 errno がたまたま EPIPE _read が失敗するが、errno はセットされない errno == EPIPE が成立してしまう ということが起こっているのではないかと思い _read の前に errno == EPIPE と GetLastError() == ERROR_NETNAME_DELETED になってないかチェックしてみましたが、 そういう状態にはなっていませんでした。 あと、rb_w32_read の返値の型が size_t になっていたので、 ret < 0 といったチェックで誤動作しているのではと思い、 int に直してみましたが、やはり変化ありませんでした。