From: Akinori MUSHA Date: 2001-05-29T18:51:59+09:00 Subject: [ruby-dev:13405] Re: clearerr(3)  ちょっと余計なフォローアップですが。。 At Tue, 29 May 2001 15:11:40 +0900, Satoru Takabayashi wrote: > ただいま、FreeBSD のソースコードで確認すると、たしかに > > (void) usleep(250000); > clearerr(fp); > > とあります。 > >  FreeBSD では、 select/poll や sleep を挟んだ条件待ちループの 置き換えとして kqueue/kevent(2) なるインターフェースが考案・実装 され、 I/O 待ち (read, write) プロセス待ち (exit, fork, exec) vnode 待ち (write, link, unlink, rename, chmod, ...) シグナル待ち 等を無駄な待ち時間を入れずに洗練した形でイベント処理できるように なっています。4.0 で導入後、カーネル内部や標準搭載コマンドはみな kqueue を積極的に利用する方向で移行が進んでいます。  tail(1) も例外ではなく、上のソースを見ると分かりますが usleep() / clearerr() の部分は kqueue が使えない場合用の代替コードです。  どういう場合に利用できないかというと、今のところ kqueue は UFS 以外のファイルシステム上のファイルの変更は検出できません。  というわけで、もし tail をいじって clearerr() 等の挙動を確認 されるという場合には、例えば NFS 上のファイルを対象にするか、 あるいは kqueue を使わないようにいじる必要があります。  ぜんぜん Ruby と関係なくてすみません。 -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "Freeze this moment a little bit longer, make each impression a little bit stronger.. Experience slips away -- Time stand still"