山本です。 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 ではだめでしょうか?(乱暴すぎる?)