c-linux,如何派生和执行一个其父进程可以读取stdout的进程



我不知道如何执行进程并读取其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。

  1. 创建管道。让我们把它的末端称为rw
  2. 叉子。
    • 孩子:
      1. 关闭r
      2. 使用dup2w克隆到stdout上
      3. 关闭w
      4. 执行
    • 家长:
      1. 关闭w

为清楚起见,省略了错误检查。

最新更新