目的:
- 数据传输
- 资源共享
- 通知事件
- 进程控制
通信分类
管道:
管道分为匿名管道和命名管道
- 匿名管道:创建无名管道
int pipe(int fd[2]); fd[0]---->表示读 fd[1]---->表示写
由fork()来共享管道原理
父进程:关掉fd[1] 子进程:关掉fd[0]
特点: 只能用于具有共同祖先的进程之间通信,一个管道由一个进程创建,该进程调用fork(),此后父子进程可以共享该管道。
生命周期随进程
提供流式服务
半双工通信,数据只能向一个方向流动
2、命名管道:在不相关的进程间交换数据
创建方法:命令创建:mkfifo filename
函数创建:int mkfifo(filename,mode)
两种管道的区别:匿名管道由pipe创建并打开,命名管道由mkfifo创建,由open打开
工作完成后,具有相同的意义消息队列
- 具有四次系统调用
- 提供一个从一个进程向另外一个进程发送一块数据的方法
- 每个数据块都被认为是有一个类型,接收者接收的数据块类型可以不同
- 系统消息队列总数具有上限(MSGMNI),每个消息的长度具有最大限度(MSGMAX)
消息队列函数,及参数代表含义
ipcs------->查看IPC资源 ipcrm-------->删除IPC资源
共享内存
特点:最快的进程间通信方式
共享内存函数及参数代表含义信号量
主要用于同步和互斥
同步:多个进程相互配合完成一项工作
互斥:各进程要求共享资源,有些资源要求互斥使用,进程间就会竞争这些资源,就叫进程间互斥。
信号量与P,V操作:
信号量:互斥:PV在同一个进程中 同步:PV在不同进程中
信号量值得含义:
信号量的函数及其参数>0 表示可用资源数 =0 表示无资源可用 <0 表示等待队列中进程个数
以上就是进程间通信的四种方法啦~