从C中的fifo清除fread()上的缓冲区?

时间:2019-05-29 19:47:22

标签: c fread fifo

我正在使用C函数fread()从FIFO读取连续数据(文本行/条带)。现在我注意到我的过程在ram中越来越大。我可以以某种方式刷新fopen()句柄的缓冲区吗? 如果我在每行读完之后都进行fclose()和随后的fopen()操作,可以避免进程增长,但这真的是解决方案吗?

int main() {
    unsigned char buffer[1];

    instream=fopen("/path/to/fifo", "r");
    if (instream!=NULL) {
        while (fread(&buffer, 1, 1, instream)==1) {
            // ...
        }
    }
    else {
        // error handling...
    }

    return 0;
}

这可行,但是看起来很丑且容易出错?

int main() {
    unsigned char buffer[1];

    instream=fopen("/path/to/fifo", "r");
    if (instream!=NULL) {
        while (fread(&buffer, 1, 1, instream)==1) {
            // ...

        if (buffer[0] == '\n') {
            fclose(instream);
            instream=fopen("/path/to/fifo", "r");
        }
    }
    else {
        // error handling...
    }

    return 0;
}

另一个问题:是否存在我的程序读取速度比写入fifo的其他程序输出更快的风险,因此fread(...)将是0,而while循环会结束吗?

0 个答案:

没有答案