Gen Otsuji
gen_otsuj****@yahoo*****
2004年 1月 20日 (火) 20:57:23 JST
尾辻です。 On Mon, 19 Jan 2004 11:41:12 -0600 Hiroyuki Komatsu <komat****@taiya*****> wrote: > $stdout.sync = true > while line = $stdin.gets do > p line > end > > というコードは通りますでしょうか? 通りました。 しかし調べた結果,次を実行すると ----------test.rb---------- #!/usr/local/bin/ruby require 'sary' while line = $stdin.gets do p line end --------------------------- % ./test.rb ./test.rb:3:in `gets': Resource temporarily unavailable(Errno::EAGAIN) from ./test.rb:3 結果がこうなりました。 しかしruby_rを使えば上記の実行は大丈夫です。 どうもFreeBSD特有の問題であるようでした。FreeBSD4.xではスレッドライブラ リがlibc_rというものなのですが,それが標準ライブラリのlibcと排他的だったた めlibc_rをリンクしたsary等を使うにはruby_rを使わなければならなかったの です。5.xではスレッドライブラリがlibc_r,libthr,libkseの三つあるように なっていて排他的でもなくなっています。しかし古いlibc_rがportsでは標準とな っています。libc_r自体も排他的ではなくなったのですが、まだバグがあってlibc, libc_rを混ぜて使うとstdioが変になることがあるということのようです。 getsのエラーはこのためのようです。ということをFreeBSDのえらい人に知らされ ていたのですが、忘れていました。というわけでruby_rをまだ使い続ける方が 良さそうです。 お騒がせ致しました。 ------ おつじ