みやむこです。 > nとrの値からすると一回目でエラーになってるようですが、whileの前 > にもclearerr(f)を入れてもダメでしょうか。ダメだろうなぁ…。 だめでした。 > HP-UXでは条件を ferror(f) && errno とでもしなけりゃいけないのか > も。 fwrite(3S) ではなく write(2) を直接使うとうまく行きました。 でも、ここだけ write(2) なのは気持ち悪いですね。 --- io.c.orig 2004-01-07 01:50:44.000000000 +0900 +++ io.c 2004-01-07 22:04:00.000000000 +0900 @@ -394,14 +394,17 @@ } } while (--n > 0); #else - while (ptr += (r = fwrite(ptr, 1, n, f)), (n -= r) > 0) { - if (ferror(f)) { + while (n > 0) { + r = write(fileno(f), ptr, n); + if (r < 0) { if (rb_io_wait_writable(fileno(f))) { clearerr(f); continue; } return -1L; } + n -= r; + ptr += r; } #endif return len - n; -- みやむこ