使用管道实现进程间的双向通信

原创 2012年03月29日 23:13:10
#include<stdio.h>
#include<unistd.h>


int main(int argc, char * argv[])
{
        int f_des1[2];
        int f_des2[2];


        int pid;
        char msg[BUFSIZ];
        char p_msg[BUFSIZ];


        if(argc != 2)
        {
                printf("Usage: %s message\n",argv[0]);
                return 1;
        }


        if(pipe(f_des1) == -1)
        {
                printf("cannot create the IPC pipe");
                return 1;
        }


        pid = fork();
        if(pid == -1)
        {
                printf("cannot create new process");
                return 1;
        }
        else if(pid == 0)
        {
                close(f_des1[1]);
                close(f_des2[0]);


                if(read(f_des1[0], msg, BUFSIZ) == -1)
                {
                        printf("child process cannot read data from pipe");
                        return 1;
                }
                else
                {
                        printf("in child proccess, receive message: %s\n",msg);
                }
                if(write(f_des2[1], msg, strlen(msg)) == -1)
                {
                        printf("child process cannot write data to pipe");
                        return 1;
                }
                else
                {
                        printf("in child process , send message back: %s\n", argv[1]);
                }
                exit(0);
        }
        else
        {
                close(f_des1[0]);
                close(f_des2[1]);


                if(write(f_des1[1], argv[1], strlen(argv[1])) == -1)
                {
                        printf("parent process cannot write data to pipe");
                        return 1;
                }
                else
                {
                        printf("in parent process , send mwssage: %s\n",argv[1]);  
                }


                if(read(f_des2[0], p_msg, BUFSIZ) == -1)
                {
                        printf("parent process cannot read data from pipe");
                        return 1;
                }
                else
                {
                        printf("in parent proccess, receive message: %s\n",p_msg);
                }
                wait(NULL);
                exit(0);
        }
        return 0;
}                                                                                                    
                                  

Linux----进程间通信-管道与两个命名管道实现进程双向通信

在Linux系统中,有时候需要多个进程之间相互协作,共同完成某项任务,进程之间或线程之间有时候需要传递信息,有时候需要同步协调彼此工作,则就会出现进程间通信(interprocess communi...
  • qq_36782456
  • qq_36782456
  • 2017年05月29日 19:45
  • 1079

Android使用Messenger实现进程间双向通信

在了解本文即将学到的技能外,有些知识还是有必要提前知道的,这样才会更容易理解本文即将讲到的知识点。需要提前预热的知识点: 1、Android四大组件之一Service,要知道怎样去写一个Service...
  • u011459799
  • u011459799
  • 2016年07月24日 12:01
  • 2100

进程间通信机制(管道、信号、共享内存/信号量/消息队列)、线程间通信机制(互斥锁、条件变量、posix匿名信号量)

一、管道 在Linux 中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现如下所述。 • 限制管道...
  • Simba888888
  • Simba888888
  • 2013年09月16日 19:43
  • 5519

进程间通信笔记(2)—管道和FIFO

进程间通信之管道和FIFO
  • zhangxiao93
  • zhangxiao93
  • 2016年08月28日 12:01
  • 752

使用消息队列实现两进程间实时通信的例子

由发送端和接收端组成,这里只是实现了发送端发送接收端接收,相当于半双工吧。编译,运行,发送端输入的数据将会在接收端显示出来,当在发送端输入end之后,发送端和接收端都会退出程序。可以使用ipcs -q...
  • ssdsafsdsd
  • ssdsafsdsd
  • 2012年11月16日 20:03
  • 4681

Java通过管道进行进程间通信

Java语言中提供了各种各样的输入输出流Stream,使我们能够很方便地对数据进行操作,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间之间传送数据。一个线程发送数据到输出管道,另一...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2016年05月01日 12:28
  • 1775

Android开发之Service通过Messenger实现线程间的通信

Messenger信使其实在真正使用中用到的并不多,但是面试的时候考官还是十分想要考察一下你的基本功的。那我们现在先来看一下Messenger的使用场景。如果你需要你的Service与远程线程通信,那...
  • u013900875
  • u013900875
  • 2014年04月12日 17:42
  • 2296

进程同步与互斥:POSIX有名信号量

在 POSIX 标准中,信号量分两种,一种是无名信号量,一种是有名信号量。无名信号量一般用于线程间同步或互斥,而有名信号量一般用于进程间同步或互斥。它们的区别和管道及命名管道的区别类似,无名信号量则直...
  • lianghe_work
  • lianghe_work
  • 2015年08月19日 09:40
  • 2037

进程间的通信方式——pipe(管道)

详解进程间通信方式———管道;管道是如何实现进程间通信的;以及管道读取数据的四种方式,以及管道容量的大小。...
  • skyroben
  • skyroben
  • 2017年05月10日 00:43
  • 2610

进程间通信 - 命名管道实现

引子 好,到这里呢,就需要介绍实现进程间通信的第四种方式了, 也就是通过命名管道来实现,前面介绍的那三种方式呢,都是有缺陷或者说局限性太强, 而这里介绍的命名管道相对来说,在这方面就...
  • L_Andy
  • L_Andy
  • 2015年01月12日 16:49
  • 1138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用管道实现进程间的双向通信
举报原因:
原因补充:

(最多只允许输入30个字)