From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-06-11T23:58:33+09:00 Subject: [ruby-dev:2856] Re: [BUG] IO#eof? when Thread using けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :2851 ] the message: "[ruby-dev:2851] Re: [BUG] IO#eof? when Thread using ", on Jun/11 17:49(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|Rubyでは, いちいちそういうめんどくさいことをなくすようにしてもらいたい >|わけですよ. > >めんどうくさいことをなくすのは望ましいのですが,読み込む予定 >の長さが読めなかったらEOFErrorを返すことでめんどうくさいこと >はなくなるんでしょうか? いや,ある局面で楽になることにはも >ちろん同意するのですが,本当はEOFでないかもしれないというのに >EOFErrorがくるのはどんなものかと…. >つまり,考えに反対しているのではなく,仕様に不賛成なのです. read(2)について調べたところ, non block io時以外ではreturn値が0になるの は, EOFのときだけ見たいです. block io時は必ずblockするとなっています. ということで, freadも, EOFが来る以外ではsize分読み込むようになっていな いのかしら? >getsは「read(2)で読み込んできた長さが短かったら」という条件 >ではなく,「read(2)が0を返したら」という条件だけになってるは >ずですからかなりましでしょう.あれ,manを見ると0を返すのは >EOFと明記してあるから「かなりまし」ではなく「大丈夫」のよう >な気もするな. >まあ,たとえ「大丈夫」でなくても,なんらかの理由でread(2)が0 >を返しちゃったら本当のEOFと絶対に区別できませんから,手の打 >ちようはないですよね. 上のような感じですから, 通常はgetsも問題ないと思います. でも, Rubyでは, IOをnon blocking ioにしてはいけないとはなっていないで すよね? つまり, non blocking ioに設定しても動作は保証されていますよね? # それは, stdioがnon blocking ioに対応している場合ですね. 実際はどうな # んだろう? すると, IO#read()がEOFErrorを返すのもまずい気がします. readline/readcharに相当する IO#readが欲しいですね. で, そのメソッドは サイズ分を読み込む前にEOFが来たら例外を出すというのはどうでしょう? __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---