From: matz@... (Yukihiro Matsumoto) Date: 1998-06-11T16:49:26+09:00 Subject: [ruby-dev:2847] Re: [BUG] IO#eof? when Thread using まつもと ゆきひろです In message "[ruby-dev:2846] Re: [BUG] IO#eof? when Thread using" on 98/06/11, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |>あ,すいません.まずlenより身時かい文字列が返って,次に読み |>込んだ時にnilが返ります. |必ず決まったサイズだけ読んでくれないなら, sysreadと同じじゃん? って思っ |ちゃうのですが... それは否定しませんが,なかなか難しいところがあるのです. |その規定のサイズだけ読み込めなかったら, 例外を出して, EOFError.restsに |最後に読み込んだ文字列をセットする. というのはどう? ファイルなどの場合にはそれで良い場合も多いとは思いますが,た とえばソケットでなんらかの都合で送られたデータの一部しか届い ていない時にはEOFでなくても,必要な量のデータが読み出せない 場合もあります.そもそもUNIXではEOFを確実に検出できる方法は ありません.ですから,実際read(2)だけではなく,fread(3)など もこのような仕様になっていて,lenは「読み込む最大長」の指定 になっているでしょう? ベースになっているOSのモデルがこのよ うなものですから,汎用的なIOのメソッドとしてはそのような仕様 は難しいのではないかと思います. いくつかの前提条件の下にそのようなメソッドが必要であれば,ア プリケーション側で定義するしかないのではないかと思いますが, いかがでしょう? 汎用のIOのメソッドで出来るのは上述のような |> * readはEOFErrorを発生するようにする |> * readに対応するナニカを作る くらいだと思います. まつもと ゆきひろ /:|)