ioctlメソッドはRubyのメソッドとしては奇妙

RubyのioctlはCのioctlの考えをそのまま持ってきているので
ioctlとしては普通だけど、Rubyのメソッドとして奇妙。

ret = ""
fd = open("/dev/dsp","r")
fd.ioctl(SoundCard::Param[:SOUND_PCM_READ_RATE],ret)

結果を返す専用の変数を渡しておくと(上記で言うとret)
変数が指しているオブジェクトが書き換わっているので

ret.unpack("s")[0]

とすると所望の値が得られる。
C言語では基本、戻り値が1つなのでこのようなインタフェースが多いけど
Rubyでこういうメソッドは珍しい。
っていうかメソッドチェーンできないので面倒くさいよ。


参考
instance method IO#ioctl
http://doc.loveruby.net/refm/api/view/method/IO/i/ioctl