我正在使用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
循环会结束吗?