进程间通信

本文详细介绍了进程间通信的目的,包括数据传输、资源共享、通知事件和进程控制。主要讨论了四种通信方式:管道(匿名管道和命名管道)、共享内存、消息队列和信号量。对于每种方式,阐述了其特点和应用场景,如管道的半双工特性、共享内存的高效性、消息队列的存储限制以及信号量在同步和互斥中的作用。
摘要由CSDN通过智能技术生成

进程间通信

进程间通信的目的
  • 数据传输:一个进程需要将它的数据发送给另一个进程;
  • 资源共享:多个进程之间共享同样的资源。
  • 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
  • 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
进程间通信方式

1.管道(数据传输)

  • 匿名管道
  • 命名管道

2.System V IPC

  • 消息队列 (数据传输)
  • 共享内存(数据共享)
  • 信号量 (进程控制)
1.管道: 是一种半双工通信(一种可以选择方向的单向通信)

本质:操作系统在内核中创建的一块缓冲区(内存) ;
多个进程通过访问同一个缓冲区就可以实现通信。
在这里插入图片描述
管道的种类:匿名管道/命名管道

1. 匿名管道:内核中的缓冲区没有明确的标识,一个进程可以通过系统调用接口创建管道

int pipe(int pipefd[2]);

通过传入的参数向用户返回两个管道的操作句柄,其中pipefd[0]用于从管道读取数据,
其中pipefd[1]用于向管道写入数据
若创建管道之后创建了一个子进程,子进程通过复制父进程的方式,可以获取到管道的操作句柄。
特性:匿名管道只能用于具有亲缘关系的进程间通信。

读写特性:
1.若管道中没有数据,则read会阻塞;若管道中数据满了,则write会阻塞;
2.若管道所有写端被关闭,则read会读完管道中的数据后返回0 (没有数据的时候将不再阻塞);
3.若管道所有读端被关闭,则继续write会触发异常导致进程退出;

**2.**命名管道:有名字的管道—内核中的管道缓冲区有自己的标识符
可以用于同- -主机上的任意进程间通信命名管道的标识符:是一个可见于文件系统的特殊管道文件.
mkfifo创建一个命名管道

int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值