在C中通过execlp传递pipefd

时间:2016-10-15 00:21:01

标签: process pipe fork parent-child

我看了一遍,似乎无法弄清楚如何做到这一点。

我有一个创建了pipe()

的父进程

现在,我想fork()父进程然后execlp()并将pipe()作为命令行参数传递给新程序。

然后从新程序内部我需要能够读取pipefd。

我在同一个过程中看到了很多关于如何做到这一点的东西,但没有关于如何做到这一点的事情。

编辑:最初的帖子是/非常模糊。

到目前为止我所拥有的是:

int pfd[2];
     if(pipe(pfd) == -1) {
             perror("Creating pipe\n");
             exit(1);
     }
pid_t pid = fork();
if(pid == -1) {
             fprintf (stderr, "Initiator Error Message : fork failed\n");
             return -1;
     }
else if(pid == 0) {  // child process
             close(pipe0[1]);        // close(write);

             execlp("program", "program", pipe0[0], NULL);
     }

但是我真的不明白我应该从“程序”里面做什么来获得FD。我尝试将它分配给各种各样的东西,但它们似乎都是错误的。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

forked和execed子进程自动继承open管道描述符,管道输出通常作为标准输入提供,因此查找管道的命令行参数非常多余:

if(!pipe(&pipefd))
  switch(fork()) {
  case  0: !dup2(pipefd[0],0)&&
           execlp("cat","cat","-n","/dev/fd/0",0);
  case -1: return perror("fork");
  default: write(pipefd[1],"OK\n",3);
}