From: Satoru Takabayashi Date: 2001-05-29T15:11:40+09:00 Subject: [ruby-dev:13395] Re: clearerr(3) WATANABE Tetsuya wrote: >|で tail -f を実現しているのを見つけて、調べたところ、 >|IO#sysread を使えば、上の対処が不要であることがわかりました。 > >私は普段から「これ」使っていたりします。ロ >グ監視などに。 % cat file | ruby tail.rb -f のように標準入力からの場合は -f が効かないようです。テストし ているときに、おやっと思いました。 >|ただ、 IO#read だとうまくいかないのに IO#sysread なら OK、と >|いう挙動はちょっと気持ちが悪い気がします。僕と同じようにはま > >IO#sysread は、システムコールが EOF になっ >たときの挙動としては、いいと思います。 >IO#read は、標準入出力ライブラリ (stdio) の >挙動ですね。 > >clearerr があると IO#read でたしかに実現で >きそうですけど... それでも引っかかっちゃう >ような気がします。 clearerr するやり方はたしか UNIX MAGAZINE 2000年 3月号の p.121 で学びました。(手元に資料がないので間違っているかも) ただいま、FreeBSD のソースコードで確認すると、たしかに (void) usleep(250000); clearerr(fp); とあります。 「それでも引っかかっちゃう」状況はたぶん心配する必要がないと 思います。 -- 高林 哲 (Takabayashi, Satoru) http://namazu.org/~satoru/