わたなべです. Wakou Aoyama <wakou / fsinet.or.jp> writes: :$ ruby -e ' :$t_stdout = open("/dev/tty", "w") :T_STDOUT = $t_stdout :$t_stdout.print "hogehoge1\n" :$t_stdout.reopen(open("/dev/null", "w")) :$t_stdout.print "hogehoge2\n" :$t_stdout.reopen(T_STDOUT) :$t_stdout.print "hogehoge3\n" :' :hogehoge1 :/tmp/rba00271:7:in `reopen': Bad file descriptor - P@P@ (Errno::EBADF) : from /tmp/rba00271:7 : :なるほど。dup は反則? なぜ「dup は反則?」 それはともかく, この結果は ruby のバグのような感じですね. こんな感じでいいと思うんですけど.
--- io.c.orig Fri Apr 02 09:56:33 1999 +++ io.c Mon Apr 12 01:12:44 1999 @@ -1620,6 +1620,5 @@ else { - fclose(fptr->f); + fflush(fptr->f); if (dup2(fileno(orig->f), fd) < 0) rb_sys_fail(orig->path); - fptr->f = rb_fdopen(fd, mode); } @@ -1628,3 +1627,3 @@ fd = fileno(fptr->f2); - fclose(fptr->f2); + fflush(fptr->f2); if (orig->f2) { @@ -1632,3 +1631,2 @@ rb_sys_fail(orig->path); - fptr->f2 = rb_fdopen(fd, "w"); }