山本です。

WATANABE Hirofumi <eban / os.rim.or.jp> wrote:
(2004/05/27 15:53)

>>  * 連続5回、全く書き込めなかったら、ファイルディスクリプタが無効と判断
>
>それはあんまりなので、errnoを見るようにしてコミットしました。

すみません、助かりました。(errno も当てにならないと思い込んでいました)

改めて fwrite() のソースファイルを覗いて、呼び出しを辿ってみると、_write() のコメントに

Return value    The number of bytes written. A write to a text file does not
                count generated carriage returns. In case of error, each
                function returns -1 and sets the global variable errno to
                one of the following:

                        EACCES  Permission denied
                        EBADF   Bad file number

と書いてあったので、EACCES もチェックしたほうがいい気がします。ただ、C++Builder6 の
fwrite がこの限りでない可能性もあるので、いっそのこと

Index: io.c
===================================================================
RCS file: /ruby/ruby/io.c,v
retrieving revision 1.277
diff -u -w -b -p -r1.277 io.c
--- io.c	27 May 2004 06:17:05 -0000	1.277
+++ io.c	27 May 2004 07:50:49 -0000
@@ -411,7 +411,7 @@ rb_io_fwrite(ptr, len, f)
     while (errno = 0, ptr += (r = fwrite(ptr, 1, n, f)), (n -= r) > 0) {
 	if (ferror(f)
 #if defined __BORLANDC__
-	    || errno == EBADF || errno == ENOENT
+	    || errno
 #endif
 	) {
 #ifdef __hpux

ではだめでしょうか?(乱暴すぎる?)