背景:我必须恢复我的旧程序,不幸的是,它在与子进程通信时失败了。该程序是用 C++ 编写的,并创建了用于写入的子进程,并打开了用于读取的管道。没有崩溃,但没有数据可读。
我的想法是在 bash 中重新创建整个场景,这样我就可以交互式地检查发生了什么。
我在 C++ 中使用的东西:
mkfifo
用于创建管道,有一个 bash 等价物popen
用于创建子流程(在我的案例中用于编写)espeak -x -q -z 1> /dev/null 2> /tmp/my-pipe
open
和read
-- 打开管道然后读取,我希望简单的cat
就足够了fwrite
-- 对于写入子进程,重定向是否有效?
所以我希望open
、read
和fwrite
是直截了当的,但是我如何将程序作为进程启动(什么是 popen
在 bash 中)?
最佳答案
bash 自然地使进程之间的管道变得非常容易,因此通常不需要创建和打开管道的命令
program1 | program2
这相当于 program1 运行 popen("program2","w");
也可以通过 program2 运行 popen("program1","r");
如果您明确想要使用命名管道:
mkfifo /tmp/mypipe
program1 >/tmp/mypipe &
program2 </tmp/mypipe
rm /tmp/mypipe
关于linux - 如何在 bash 中启动读写进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24941611/