从管道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。