17バイト長のバイナリのパケットでシリアルポートを飛んでくるんだけど、これをrubygem-serialportで読むプログラムを書くとFreeBSDでだけバイトがバースト的に落ちることがある。rubygem-serialportのCのソースを読むとread(2)を使ってるだけのパターンのはずだし、理由がわからん。IOクラスとかそっちの問題かもしれない。Cで/dev/tty*を開いてread(2)すると特にバイトが丸ごと落ちたりはしないのでrubyの側の問題。めんどくさいのでOS判定してFreeBSDだったらパイプ経由にする。