我不知道如何执行进程并读取其stdout。看起来这应该是fork((和execve((的组合,但我不知道如何连接管道。
我知道如何创建管道和叉,并在父进程中读取子进程编写的管道;
我知道如何用另一个进程替换一个进程。
我不明白的是如何将一个打开的管道从分叉的子进程传递给exec’ed进程(我希望该管道是exec’edprocesses的stdout(,供原始父进程读取。
e.g. parent => child => new-prog
(creates pipe) fork execve (I want the pipe to be stdout of new-prog)
(reads pipe) (writes pipe/stdout)
任何指针/示例都将不胜感激。
缺少的步骤是在子级(pre-exec(中使用dup2
将管道fd复制到stdout上。完成此操作后,不要忘记关闭管道fd。
- 创建管道。让我们把它的末端称为
r
和w
- 叉子。
- 孩子:
- 关闭
r
- 使用
dup2
将w
克隆到stdout上 - 关闭
w
- 执行
- 关闭
- 家长:
- 关闭
w
- 关闭
- 孩子:
为清楚起见,省略了错误检查。