みやむこです。

> でも、テストを実行すると [ruby-list:38962] と同じ問題がでました・・・。

> #4  0x50388 in rb_bug (fmt=0xea178 "rb_sys_fail(%s) - errno == 0")
>     at error.c:199
> #5  0x51dd0 in rb_sys_fail (mesg=0x0) at error.c:899
> #6  0x68458 in fptr_finalize (fptr=0x4015a668, noraise=0) at io.c:1371

HP-UX と UX/4800 の場合、fclose が EOF を返しても errno が設定されない
場合があるようです。このことが原因でしょうか。

% cat a.c
#include <stdio.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    int n, e;
    FILE *fp;

    fp = fopen(argv[1], "r");
    printf("fp=%p\n", fp);

    errno = 12345;
    n = fclose(fp);
    e = errno;
    printf("fclose=%d, errno=%d\n", n, e);

    errno = 123456;
    n = fclose(fp);
    e = errno;
    printf("fclose=%d, errno=%d\n", n, e);
}
% cc a.c
% a.out a.out
fp=7b030f68
fclose=0, errno=12345
fclose=-1, errno=123456
% a.out
fp=00000000
fclose=-1, errno=12345
fclose=-1, errno=123456


#全然分かっていないので、はずしているかもしれません。

--
みやむこ