From: matz@... (Yukihiro Matsumoto) Date: 1998-06-12T12:08:21+09:00 Subject: [ruby-dev:2861] Re: [BUG] IO#eof? when Thread using まつもと ゆきひろです In message "[ruby-dev:2856] Re: [BUG] IO#eof? when Thread using" on 98/06/11, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |read(2)について調べたところ, non block io時以外ではreturn値が0になるの |は, EOFのときだけ見たいです. block io時は必ずblockするとなっています. | |ということで, freadも, EOFが来る以外ではsize分読み込むようになっていな |いのかしら? EOF以外で0を返すことはないと思いますが,lenより短い長さを返 すことはあると思いますよ.man freadすればわかりますが. |でも, Rubyでは, IOをnon blocking ioにしてはいけないとはなっていないで |すよね? つまり, non blocking ioに設定しても動作は保証されていますよね? | |# それは, stdioがnon blocking ioに対応している場合ですね. 実際はどうな |# んだろう? ええ,stdio次第だと思います.もっともsysread/syswriteを使え ば関係ないですが. |readline/readcharに相当する IO#readが欲しいですね. で, そのメソッドは |サイズ分を読み込む前にEOFが来たら例外を出すというのはどうでしょう? そのメソッドはサイズ分を読み込む(か例外を返す)ことを保証する わけですね.では,以下のことを検討する必要がありますね. * 現在のreadの仕様を使えばrubyで簡単に定義できるが,わざわ ざ組み込みメソッドにする必要があるか * もし,必要があったとして,名前をどうするか どうしましょう? まつもと ゆきひろ /:|)