From: Tanaka Akira Date: 2004-08-17T11:56:56+09:00 Subject: [ruby-dev:24099] Re: duplex I/O for tty In article <1092710265.477071.21223.nullmailer@picachu.netlab.jp>, matz@ruby-lang.org (Yukihiro Matsumoto) writes: > |> /dev/tty のようなデバイスファイルを扱う場合は、stdio は使うなってこと > |> かもしれません。 > | > |この問題が stdio を使わないことによってしか解決できないとしたら、ソケッ > |トは stdio を使っていないのでしょうか? > > socketはバッファリングを使わないからかもしれません。 次のように for_fd で作り直した IO オブジェクトで、sync = true としても、 もともとのソケットオブジェクトのようには動作せず、Illegal seek 例外が 発生します。 % ruby -rsocket -v -e ' sock1, sock2 = UNIXSocket.pair sock2 << "aaaaaaazbbbbbbbbbbbb\n" io = IO.for_fd(sock1.fileno) io.sync = true p io.gets("z") io.puts "y" p io.gets ' ruby 1.9.0 (2004-08-14) [i686-linux] "aaaaaaaz" -e:7:in `write': Illegal seek (Errno::ESPIPE) from -e:7:in `puts' from -e:7 したがって、ここでいうバッファリングとは、IO#sync で設定できるものでは ないわけですが、具体的には何を指しているのでしょうか? -- [田中 哲][たなか あきら][Tanaka Akira]