Я читаю непрерывные данные (строки текста / строки) из FIFO с использованием функции C fread()
.Теперь я заметил, что мой процесс становится все больше и больше в оперативной памяти.Можно ли как-то очистить буфер дескриптора 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
-цикл закончится?