From: nobu.nakada@... Date: 2002-05-20T13:20:02+09:00 Subject: [ruby-dev:17155] Re: [PATCH] IO#clone for duplex IO なかだです。 At Mon, 20 May 2002 12:47:59 +0900, Nobuyoshi-Nakada wrote: > なんでR/Wのパイプをdupしたのをclose_writeするとエラーになるのか、 > 不思議だったんですが、ここではまだfptr->f2はNULLのままです。 例が間違ってました。"r+"を付けないと。 $ ruby-1.6 -ve 'f = open("|-","r+") or sleep; f.dup.close_write' ruby 1.6.7 (2002-05-16) [i686-linux] -e:1:in `close_write': closing non-duplex IO for writing (IOError) from -e:1 $ ruby-1.7 -ve 'f = open("|-","r+") or sleep; f.dup.close_write' ruby 1.7.2 (2002-05-16) [i686-linux] -e:1:in `close_write': closing non-duplex IO for writing (IOError) from -e:1 おまけにもう一ヶ所修正が必要でした。 Index: io.c =================================================================== RCS file: /cvs/ruby/src/ruby/io.c,v retrieving revision 1.137 diff -u -2 -p -r1.137 io.c --- io.c 2002/05/02 07:50:36 1.137 +++ io.c 2002/05/20 04:15:35 @@ -2228,9 +2228,9 @@ rb_io_clone(io) fd = ruby_dup(fileno(orig->f)); fptr->f = rb_fdopen(fd, mode); - if (fptr->f2) { + if (orig->f2) { if (fileno(orig->f) != fileno(orig->f2)) { fd = ruby_dup(fileno(orig->f2)); } - fptr->f = rb_fdopen(fd, "w"); + fptr->f2 = rb_fdopen(fd, "w"); } if (fptr->mode & FMODE_BINMODE) { -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦