从管道C读取

时间:2014-03-07 08:11:39

标签: c pipe

我需要创建一个新的进程来运行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]);

非常感谢帮助!

3 个答案:

答案 0 :(得分:1)

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

以下是应如何完成C pipe, fork, dup, and exec()

的代码+修复

答案 1 :(得分:0)

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

答案 2 :(得分:0)

首先:您必须在pipe之前调用fork,否则进程之间将不会进行通信。

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

在调用dup之前关闭stdin。