我需要创建一个新的进程来运行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]);
非常感谢帮助!
答案 0 :(得分:1)
你需要在前叉之前创建管道!
以下是应如何完成C pipe, fork, dup, and exec()
的代码+修复答案 1 :(得分:0)
请您详细说明您要做的事情?这里有一件事是你在fork之后调用pipe()调用,导致父节点和子节点有不同的文件描述符副本。您应该在fork()调用之前创建管道,以便两个进程共享管道。
答案 2 :(得分:0)
首先:您必须在pipe
之前调用fork
,否则进程之间将不会进行通信。
其次:read
之前的execlp
没有任何意义,因为您没有在任何地方使用buff
中存储的信息。这个你必须解释,以获得更多的帮助。
在调用dup
之前关闭stdin。