From: nobu@... Date: 2004-08-29T01:30:10+09:00 Subject: [ruby-dev:24196] Re: IO#truncate なかだです。 At Sun, 29 Aug 2004 00:06:37 +0900, Tanaka Akira wrote in [ruby-dev:24191]: > > IO#truncate を使った場合、次のように、消したはずと感じられる truncate > 以前に puts したデータがファイルに書き込まれたままになるのですが、これ > は意図された挙動でしょうか? truncateする前にflushするようにすればいいんでしょうか。 Index: file.c =================================================================== RCS file: /cvs/ruby/src/ruby/file.c,v retrieving revision 1.184 diff -U2 -p -d -r1.184 file.c --- file.c 17 Jul 2004 02:18:53 -0000 1.184 +++ file.c 28 Aug 2004 16:26:34 -0000 @@ -2966,4 +2966,5 @@ rb_file_truncate(obj, len) { OpenFile *fptr; + FILE *f; rb_secure(2); @@ -2972,10 +2973,12 @@ rb_file_truncate(obj, len) rb_raise(rb_eIOError, "not opened for writing"); } + f = GetWriteFile(fptr); + fflush(f); #ifdef HAVE_TRUNCATE - if (ftruncate(fileno(fptr->f), NUM2OFFT(len)) < 0) + if (ftruncate(fileno(f), NUM2OFFT(len)) < 0) rb_sys_fail(fptr->path); #else # ifdef HAVE_CHSIZE - if (chsize(fileno(fptr->f), NUM2OFFT(len)) < 0) + if (chsize(fileno(f), NUM2OFFT(len)) < 0) rb_sys_fail(fptr->path); # else -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦