From: Tanaka Akira Date: 2004-12-26T15:12:34+09:00 Subject: [ruby-dev:25334] Re: test_readline.rb blocks on BSD again In article <200412260604.iBQ64C8u006066@sharui.nakada.niregi.kanuma.tochigi.jp>, nobu@ruby-lang.org writes: >> んーと、こっちは freopen が責任を持って FILE 内のモードを変えてくれる >> と思うので、モードが食い違うことは起きないと思うんですよね。それなのに >> 禁止するのはなぜでしょう? > > なるほど、いわれてみれば確かにその通り。 あとから気がついたのですが、freopen でモードを変えることを許すと、 | + fptr->mode &= ~FMODE_READWRITE; | + fptr->mode |= (fptr->f == stdin) ? FMODE_READABLE : FMODE_WRITABLE; という固定的なのはまずくて、もともとの fptr->mode & FMODE_READWRITE を 残しておくようにしないと食い違いますね。 しかし、さらに考えてみると freopen で FILE 内のモードを変えられるなら、 STDIN.reopen(STDOUT) とかでも、とりあえず stdin を freopen で w にして から dup2 で fd をすり替えればなんとかなるのではないかとも思ったりしま した。まぁ、そうやって嬉しいことがあるのかというと疑わしいものがありま すが。 >> あと、ついでに尋ねますが、1.9 の io.c の io_reopen で、なんで CYGWIN >> だけは stdin とかを fclose するのを許しているんでしょう? > > このifdefは1.321で追加されたものなので、わたなべさんに聞かない > と。しばらく留守にしていてMLもほとんど読めなかった時期ですし。 おぉ、(尋ねるべき人を) 勘違いしていました。 -- [田中 哲][たなか あきら][Tanaka Akira]