从管道C读取

我需要创建一个新进程来运行xxx程序,加载xxx程序,发送’xxx’从管道读取的数据,但我收到此错误,“错误:无法读取stdin”每当我尝试编译。

pid_t pid; pid = fork(); int fd[2]; int ret; ret = pipe(fd); if (ret == -1) { perror("pipe failed"); exit(1); } if (pid == -1) { perror("fork failed"); exit(1); } else if (pid == 0) //Child { char buff[10]; int validate; close(fd[1]); dup2(fd[0], STDIN_FILENO); close(fd[0]); read(STDIN_FILENO, buff, sizeof(buff)); xxx = execlp("./xxx", "./xxx", NULL); //run xxx exit(validate); } else //Parent //WRITE STDIN TO PIPE { close(fd[0]); //writes data to pipe close(fd[1]); 

非常感谢帮助!

你需要在前叉之前创建管道!

这是代码+修复它应该如何完成C管道,fork,dup和exec()

你能详细说明你想做什么吗? 这里有一件事是你在fork之后调用pipe()调用,导致父节点和子节点有不同的文件描述符副本。 您应该在fork()调用之前创建管道,以便两个进程共享管道。

首先:你必须在fork之前调用pipe ,否则进程之间将没有通信。

其次:你在execlp之前的read没有任何意义,因为你没有在任何地方使用存储在buff信息。 这个你必须解释,以获得更多的帮助。

在调用dup之前也关闭stdin。