[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24099] Re: duplex I/O for tty

From: Tanaka Akira <akr@...17n.org>
Date: 2004-08-17 02:56:56 UTC
List: ruby-dev #24099
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]

In This Thread