[#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:24089] Re: duplex I/O for tty

From: とみたまさひろ <tommy@...>
Date: 2004-08-16 10:09:33 UTC
List: ruby-dev #24089
とみたです。

On Mon, 16 Aug 2004 17:47:36 +0900
Tanaka Akira <akr@m17n.org> wrote:

> 見つけてしまったので一応報告するのですが、次のように tty と双方向にや
> りとりすると、データが消えることがあります。
	〜〜
> 問題は、まず puts で出力したはずの y が出て来ません。
> 
> また、1回目の gets で aaaaaaaz が返って来るので、2回目の gets では残り
> の bbbbbbbbbbbb が返って来ると期待されるのですが、そうならずに nil が
> 返って来ます。

C でも同じような現象になるので、Ruby じゃなくて stdio の問題のように思
います。

% cat aa.c
#include <stdio.h>
main()
{
  char buf[1024];
  FILE *fp = fopen("/dev/tty", "r+");
  if (fgets(buf, 10, fp) != NULL)
    puts(buf);
  fputs("y", fp);
  if (fgets(buf, 10, fp) != NULL)
    puts(buf);
}
% make aa
cc     aa.c   -o aa
% ./aa
123456789123456789		← 入力
123456789			← 出力
% 

fputs() の行をコメントアウトすると、

% ./aa
123456789123456789		← 入力
123456789			← 出力
123456789			← 出力
% 

となります。

/dev/tty のようなデバイスファイルを扱う場合は、stdio は使うなってこと
かもしれません。

-- 
とみたまさひろ <tommy@tmtm.org>

In This Thread