From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-03-18T19:47:16+09:00 Subject: [ruby-dev:1855] Re: trap and throw problem けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :01854 ] the message: "[ruby-dev:1854] Re: trap and throw problem ", on Mar/18 18:13(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです. >でも割込みが来ただけで,ハンドラからstdioを呼んだわけでもな >いのに内部バッファのポインタがずれちゃう(んですよね)ってのは, >どっちかっていうとstdioのバグっていっても良いような気がします. 何か聞かれているみたいなんで調べました. $4 = {_flags = -72539512, _IO_read_ptr = 0x400c4006 "", _IO_read_end = 0x400c4006 "", _IO_read_base = 0x400c4000 "kkkkk\n", _IO_write_base = 0x400c4000 "kkkkk\n", _IO_write_ptr = 0x400c4000 "kkkkk\n", _IO_write_end = 0x400c4000 "kkkkk\n", _IO_buf_base = 0x400c4000 "kkkkk\n", _IO_buf_end = 0x400c5000
, _IO_save_base = 0x0, _IO_backup_base = 0x0, _IO_save_end = 0x0, _markers = 0x0, _chain = 0x0, _fileno = 0, _blksize = 0, _offset = 17, _cur_column = 0, _unused = 0 '\000', _shortbuf = "", _IO_lock = {ptr = 0x0, field1 = 0, field2 = 0}} (gdb) cont Continuing. in> Program received signal SIGINT, Interrupt. trap! Breakpoint 1, foo () at stdout2.c:21 (gdb) p *(FILE*)stdin $5 = {_flags = -72539512, _IO_read_ptr = 0x400c4000 "kkkkk\n", _IO_read_end = 0x400c4006 "", _IO_read_base = 0x400c4000 "kkkkk\n", _IO_write_base = 0x400c4000 "kkkkk\n", _IO_write_ptr = 0x400c4000 "kkkkk\n", _IO_write_end = 0x400c4000 "kkkkk\n", _IO_buf_base = 0x400c4000 "kkkkk\n", _IO_buf_end = 0x400c5000
, _IO_save_base = 0x0, _IO_backup_base = 0x0, _IO_save_end = 0x0, _markers = 0x0, _chain = 0x0, _fileno = 0, _blksize = 0, _offset = 17, _cur_column = 0, _unused = 0 '\000', _shortbuf = "", _IO_lock = {ptr = 0x0, field1 = 0, field2 = 0}} こんな感じです. _IO_read_ptrがバッファの先頭に戻っていますね. それで, _IO_read_endが前のままなので, つぎにgets()をすると前の文字列が返るんで すね... やはりgetc()のバグっぽいですね. >libcをバージョンアップする.多分,そのlibcに固有の問題だと思 libcのバージョンアップ... 何か大変そうだよなあ... 簡単なんでしたっけ? >います.あるいは「他の人のところではきっと起こっていないんだ」 >と自分を慰めるとか…. まず, 自分のところで動かないと(^^;;;; __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---