From: Wakou Aoyama Date: 1999-07-23T12:50:04+09:00 Subject: [ruby-dev:7409] Re: Ruby 1.3.5 青山です。 Fri, Jul 23, 1999 at 12:23:27PM +0900 において Shin-ichiro Hara さん曰く: > 私がいきなりの eof? が問題だと言ったのは、(最初 false であることが) > ユーザーの直観と事なる場合があるからです。それからもう一つ、現行の > eof? も feof(3) も io の種類によっては入力待ちでブロックすることが > ありますよね?それもユーザーが理解していないといけない。必ず何バイ > トか読んでから eof? を使うのを作法にすべきかと。話がちょっとずれま > した。 ブロックの問題は面倒ですよね。ソケットの場合は、相手の送出の具合によっ ては、何バイトか読んだあとの eof? でもブロックしますから。これはもう相 手しだいなので、select() 等でタイムアウトさせるぐらいしか方法は無いと 思います。eof? にタイムアウトオプションをつけるとか... def eof?() select() feof() end > あとちょっとで結論がでそう。(^^;;; 残るは read(0) ですか。現在 cvs server にあるものは次のような動きです。 io.stat.size # 0 io.read(0) # "" EOF の判定を feof(3) で行っているので、nil になりません。 一度 EOF に達した後では nil io.stat.size # 0 io.read(1) # "" io.read(0) # nil read(0) は EOF に影響しない。 io.stat.size # 0 io.read(0) # "" io.read(0) # "" io.stat.size # 0 io.read(0) # "" io.read(1) # "" io.read(0) # nil 私としては、この動きか、あるいは長さが負の場合と一緒にエラーあたりが良 さそうかと。 -- 青山 和光 Wakou Aoyama