Linux学习笔记之进程间通讯
进程间通信的方式主要有:管道、信号量、消息队列、共享内存套接字等几种方式。
- 管道(半双工通信):
通信原理:管道通信就像现实中管道的两端一样,由一个进程进行写操作,其余进程进行读操作。如果管道为空,读操作(read)会阻塞。如果管道为满则写操作(write)会阻塞。
数据存放:写入管道的数据会在内存中存放。
若对管道进行操作时:读端和写端都必须存在;如果写端关闭,读,返回会0(读到0个字节);如果读端关闭,写,产生异常(SIGPIPE)。
分类:有名管道 无名管道(通信数据遵从先进先出的原则)
有名管道可以在任意两个进程间通信 ,通信是双向的,任意一端都可读可写,但同一时间只能一端读一端写。
无名管道只能在父子进程间通信 ,通信是单向的,只能一端读一端写。
2.消息队列
特点:1)是消息的链表,具有特定的格式,存放在内存当中,由消息队列标识符标识;
2)消息队列允许一个或者多个进程向他写入或者读取信息;
3)消息队列可实现消息的随机查询,不一定要以先进先出的顺序读取,也可以按照类型读取。
3.信号量
用来同步进程的特殊变量,可以进行原子减一(P操作,代表获取资源),也可进行原子加一(V操作,代表释放资源)
信号量大于0时记录资源的数量,小于0时记录等待资源进程的数量。
4.共享内存(多个进程共享的一块物理地址内存):如下图所示A、B进程的共享内存,它们是将物理内存分别映射到自己的虚拟空间地址上。