我看了一遍,似乎无法弄清楚如何做到这一点。
我有一个创建了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。我尝试将它分配给各种各样的东西,但它们似乎都是错误的。
提前谢谢!
答案 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);
}