继续写入文件,并在文件大小变为15GB时点击EBADF

时间:2019-07-16 22:28:55

标签: c errno tlv

我有一个函数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);
}

0 个答案:

没有答案