Linux下父子进程管道通信

主要是部分程序使用了大量的assert,如果用线程的话,貌似会把整个进程挂掉,因此只能父子来了。

由于通信的信息不多,所以用管道读写应该就够了。

#include <stdio.h>

int main()
{
    int fd[2];
    int pid;
    char buf[1024];

    if( -1 == pipe(fd) )
    {
        printf("pipe() fail.");
        return -1;
    }   

    pid = fork();
    if( 0 == pid )
    {
        close(fd[0]);
        printf("I'm child.\n");
        snprintf(buf,1024,"Child say hello to parent.\n");
        write(fd[1],buf,sizeof(buf));
        printf("Child write finished.\n");
        close(fd[1]);
    }
    else if( pid > 0)
    {
        close(fd[1]);
        printf("I'm parent.\n");
        read(fd[0],buf,sizeof(buf));
        printf("Child says:\n%s",buf);
        close(fd[0]);
    }
    else
    {
        printf("fork() fail.\n");
        close(fd[0]);
        close(fd[1]);
        return -1;
    }   

    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *