Linux学习笔记之进程间通讯

进程间通信的方式主要有:管道、信号量、消息队列、共享内存套接字等几种方式。

  1. 管道(半双工通信):

                                               Linux学习笔记之进程间通讯                               

             通信原理:管道通信就像现实中管道的两端一样,由一个进程进行写操作,其余进程进行读操作。如果管道为空,读操作(read)会阻塞。如果管道为满则写操作(write)会阻塞。

            数据存放:写入管道的数据会在内存中存放。

            若对管道进行操作时:读端和写端都必须存在;如果写端关闭,读,返回会0(读到0个字节);如果读端关闭,写,产生异常(SIGPIPE)。

            分类:有名管道 无名管道(通信数据遵从先进先出的原则)

            有名管道可以在任意两个进程间通信 ,通信是双向的,任意一端都可读可写,但同一时间只能一端读一端写。

            无名管道只能在父子进程间通信 ,通信是单向的,只能一端读一端写。

  2.消息队列

特点:1)是消息的链表,具有特定的格式,存放在内存当中,由消息队列标识符标识;

            2)消息队列允许一个或者多个进程向他写入或者读取信息;

            3)消息队列可实现消息的随机查询,不一定要以先进先出的顺序读取,也可以按照类型读取。

  3.信号量

          用来同步进程的特殊变量,可以进行原子减一(P操作,代表获取资源),也可进行原子加一(V操作,代表释放资源)

          信号量大于0时记录资源的数量,小于0时记录等待资源进程的数量。

  4.共享内存(多个进程共享的一块物理地址内存):如下图所示A、B进程的共享内存,它们是将物理内存分别映射到自己的虚拟空间地址上。

                                           Linux学习笔记之进程间通讯