linux - 如何在 bash 中启动读写进程?

标签 linux bash unix process

背景:我必须恢复我的旧程序,不幸的是,它在与子进程通信时失败了。该程序是用 C++ 编写的,并创建了用于写入的子进程,并打开了用于读取的管道。没有崩溃,但没有数据可读。

我的想法是在 bash 中重新创建整个场景,这样我就可以交互式地检查发生了什么。

我在 C++ 中使用的东西:

  • mkfifo 用于创建管道,有一个 bash 等价物
  • popen 用于创建子流程(在我的案例中用于编写)

    espeak -x -q -z 1> /dev/null 2> /tmp/my-pipe
    
  • openread -- 打开管道然后读取,我希望简单的 cat 就足够了

  • fwrite -- 对于写入子进程,重定向是否有效?

所以我希望openreadfwrite 是直截了当的,但是我如何将程序作为进程启动(什么是 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/

相关文章:

bash - Bash subshel​​l用ssh命令非常奇怪的行为

linux - 从具有公共(public)(未排序)列的两个文件创建新文件

java - Axis2 城墙 : No user value in the rampart configuratio

java - 未找到 JDK。请验证 STUDIO_JDK、JDK_HOME 或 JAVA_HOME 环境变量是否指向有效的 JDK 安装

linux - Bash:使用包含带转义空格的目录的变量的意外行为

将数据添加到数据库的 Linux bash 脚本

unix - 在 vim 中打开与当前文件相同的文件夹中的文件

linux - 在 vi 中移动光标会产生意外的字符。怎么会?

linux - 如何使用 IdentityFile 通过 SSH 远程运行 sudo 命令?

linux文件权限和不同的用户权限