Как повторно включить istream FIFO, закрытый другим концом?
Я получаю данные через FIFO, используя istream
, Как только другой конец закроет его, я не смогу быть готовым снова, хотя я очистил eof
немного. badbit
всегда там.
Как повторно включить мой FIFO в режиме чтения?
Вот мой фрагмент кода:
std::istream &os;
// ...
try {
os.get(tmp, length+1);
}
catch(std::exception const& e)
{
std::cerr << "exception failure caught: " << e.what() << '\n';
}
if ((os.rdstate() & std::ios_base::eofbit) > 0) {
os.clear();
os.seekg(0, std::ios::beg);
}
1 ответ
Наконец, решение состояло в том, чтобы заменить std::ifstream на std::filebuf и закрыть filebuf, когда istream больше не доступен.
std::filebuf fb;
while (1==1)
{
if fb.open(myfifo, std::ios::binary|std::ios::in)
{
std::istream infifo(&fb);
while (infifo)
{
infifo >> *tmp;
// do your job
}
fb.close();
}