From: Masaki Fukushima Date: 1999-09-14T17:17:29+09:00 Subject: [ruby-dev:7844] Re: socket and buffering 福嶋です。 matz@netlab.co.jp (Yukihiro Matsumoto) wrote: > |したがって、sysread以外の入力メソッドを使うと全部 1 byte ずつ > |read システムコールが発行されてしまうと。 > |stdioを経由で、ブロックせずに読み込むにはそれしかないからだと思い > |ますけど。 > > readも大丈夫でしょう? 内心ではソケットの入力はreadかrecvだ > よなあと思ってます。問題はどこにも書いた覚えがないことですが。 以下のような環境で調べたところ、Socket#read (中ではfread(3)が呼ば れる)を使うと、やはり 1 byte づつの read になってしまいます。 Debian/GNU Linxu slink(i386) libc6_2.0.7.19981211 で strace BSD/OS 3.1 (i386) で ktrace SunOS 5.6 (sparc) で truss LinuxとBSDのlibcのソースをざっと見てみました。断定はできませんが、 setbuf() でバファリングをoffにした時点で、その FILE に 1 byte の バッファが割り当てられ、そのバッファを通して入力を行なっているい るように見えます。そのため 1 byte づつ read システムコールが発行 されてしまうようです。 --- 福嶋正機