[prime-dev: 118] Re: primeのFreeBSD portsバージョンアップ中なのですが、

Back to archive index

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をまだ使い続ける方が
良さそうです。
お騒がせ致しました。

------
おつじ




Prime-dev メーリングリストの案内
Back to archive index