わたなべです.

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"); }