我有一个函数foo(),它将TLV写入文件。 foo()已被连续调用,并且文件的大小增长非常快。当文件大小增加到15GB左右时,它突然返回errno 9 EBADF。我的程序是单线程的,因此没有其他线程关闭fd。
我不知道这里发生了什么。我的问题是为什么联储突然变得糟糕。当文件很大时,系统会代表我的程序关闭fd吗?
boolean foo(int fd, char tlv_t, uint32 sz, const void *val)
{
int rc;
uint32 tlv_l;
rc = write(fd, &tlv_t, 1);
if (rc != 1) {
return (FALSE);
}
tlv_l = htonl(sz);
rc = write(fd, &tlv_l, sizeof(tlv_l));
if (rc != sizeof(tlv_l)) {
return (FALSE);
}
rc = write(fd, val, sz);
if (rc != sz) {
return (FALSE);
}
return (TRUE);
}