通过 ifstream 对象阻止从 FIFO 读取

jac*_*hab 5 c++ file-io filestream fifo

我打开一个 FIFO 文件作为ifstream. 一旦对象被创建,线程就会被阻塞,直到我将一些东西发送到 FIFO 中(这对我来说没问题)。然后我调用getline()从流中获取数据。

如何再次读取阻塞线程,直到更多数据写入 FIFO 文件?

谢谢

Mic*_*fik 4

我还没有测试过这段代码,但我想知道当您读取所有可用数据时 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果读取 FIFO 末尾,请重置并等待更多数据。如果发生错误,您就完成了。我从这个网站得到了这个想法。您可能还必须在执行重置的同一块中关闭并重新打开 FIFO。

  • 这是忙着等吗?当我们重置 EOF 位时,什么会阻止 EOF 被重置并导致我们旋转? (4认同)
  • 没有否决票,但该代码永远不会停止,正如已经提到的(忙等待)。我只是想再次强调这一点。 (2认同)