如何将管道与一个管道相结合

时间:2015-10-12 06:07:18

标签: c unix

尝试响应程序的输出,并且这应该得到答案,但它不起作用。这是我的代码:

int main() {

    char *args[] = {"./a.out", 0};
    int fd1[2], fd2[2];

    if(pipe(fd1) == -1 || pipe(fd2) == -1) {
        perror("error pipe\n");
        return;
    }

    int pid = fork();
    if (pid == 0) {
        dup2(fd2[0], 0);
        close(fd2[1]);

        execve("./a.out", args, NULL);
    } else {
        dup2(fd1[0], 0);
        close(fd1[0]);

        write(fd2[1], "23", 2);
        write(fd2[1], "A", 1);

        int status;
        wait(&status);
    }

    return 0;
}

提前致谢

1 个答案:

答案 0 :(得分:0)

最后,我的错误不是在写入中写入换行符,因此没有完全读取被调用的程序。

 int main() {

    char *args[] = {"./a.out", 0};
    int fd1[2];
    if(pipe(fd1) == -1) {
        perror("error pipe\n");
        return;
    }

    int pid = fork();
    if (pid == 0) {
        dup2(fd1[0], 0);
        close(fd1[0]);
        close(fd1[1]);

        execve("./a.out", args, NULL);
    } else {

        write(fd1[1], "5\n", 2);

        int status;
        wait(&status);
    }

    return 0;
}