Я не тестировал этот код, но мне интересно, просто ли FIFO устанавливает бит EOF, когда вы читаете все доступные данные. В этом случае вы можете сделать это:
std::ifstream fifo;
std::string line;
bool done = false;
/* code to open your FIFO */
while (!done)
{
while (std::getline(fifo, line))
{
/* do stuff with line */
}
if (fifo.eof())
{
fifo.clear(); // Clear the EOF bit to enable further reading
}
else
{
done = true;
}
}
Если вы прочитали конец FIFO, выполните сброс и дождитесь дальнейших данных. Если произошла ошибка, все готово. Я получил идею об этом с этого сайта . Возможно, вам также придется закрыть и снова открыть FIFO в том же блоке, где вы выполняете сброс.