Как повторно включить 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();
    }
Другие вопросы по тегам