Linux C中的IPC管道

时间:2014-09-19 19:14:49

标签: c linux file-descriptor stdio

这是一个简单的代码,它使两个子进程通信:第一个执行“ls”并将输出传递给myfd [1];第二个接收来自myfd [0]的输出,然后执行“sort”(并显示结果)。父进程等待这两个进程。

但是这段代码不起作用。它陷入了第二个子进程。任何可能的原因? 我是否在正确的位置使用了正确的“关闭”和“转储”?

我的代码:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>

int main(void)
{
    int pid;
    int wpid;
    int status = 0;

    int myfd[2];

    printf("parent's pid: %d\n",getpid());

    pipe(myfd);

    pid = fork();
    if(pid == 0) // child 1 - execute "ls"
    {
        printf("child1's pid: %d\n",getpid());

        close(1);
        dup(myfd[1]);
        close(0);
        close(myfd[0]);

        execlp("ls","child_process1",NULL);
    }
    else
    {
        pid = fork();
        if(pid == 0) // child 2 - execute "sort"
        {
            printf("child2's pid: %d\n",getpid());

            close(myfd[1]);
            close(0);
            dup(myfd[0]);

            execlp("sort","child_process2",NULL);
        }
    }

    // parent
    while((wpid = wait(&status)) > 0)
    {
        // wait until two child processes finish
    }
    printf("done!\n");
}

0 个答案:

没有答案