监控C++中命名管道(FIFO)中的数据



我想通过命名管道链接几个程序的stdin和stdout。这些程序的作用就像服务或守护程序,所以我希望它们可以继续从FIFO读取,直到它们因FIFO被清除而被阻止。我修改了问题C++的答案中的代码:当数据写入管道时从stdin读取,如下所示,以验证我的想法:

#include <iostream>
int main() {            
char input;
while(1){
while(std::cin>>input){                 
std::cout<<input;
}
}
}

然后我将其编译为一个名为t的可执行文件。现在打开一个终端并输入以下命令:

mkfifo ff
./t > ff

打开一个新的终端并输入:

./t < ff

现在,第一端子的输入将出现在第二端子,第二端子中的t一旦读取了FIFO中的所有字符就会被阻止。现在一切都很好,但当我终止第一个端子中的t时,第二个端子中t不再被阻塞,尽管FIFO已经被清除,即使删除了FIFO,也很快占用了100%的CPU使用量。

我的问题:

  • 为什么在我的情况下,当第一个t退出时,第二个t没有被阻止
  • 当第一CCD_ 8退出时,是否仍然存在保持第二CCD_
  • 也许我关于通过FIFO链接程序的整个想法是错误的。有没有更好的做法来连接shell中几个程序的stdin和stdout

为什么在我的情况下,当第一个t退出时,第二个t没有被阻止

当第一个t终止时,它会在fifo上生成文件结尾,第二个t不再被阻止。

当第一个t退出

这是进程间通信(IPC(中的一个问题。IPC机制(此处为fifo(的输入/输出应在C++程序中完成。

是否有更好的做法来连接几个shell中的程序?

如果进程相关,则可以通过管道(|(运算符进行连接。否则,使用带有重定向的fifo似乎是唯一的方法。

相关内容

  • 没有找到相关文章

最新更新