Linux---进程间通信

本文探讨了进程间通信的两种方式:匿名管道和命名管道,以及System V共享内存,包括ftok函数和关键操作。介绍了如何通过管道进行数据流和资源共享,以及如何利用System V实现高效同步与互斥。


要是想让两个进程之间通信,就是想尽一切办法,让两个进程能够看到同一份资源(内存)。
其中内存的提供是通过文件的方式就叫做 管道,如果绕过文件那么就到做 system V

进程间通信介绍

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

1. 管道

管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”
Linux下可以认定为一切皆文件,那么管道也是一个文件
在这里插入图片描述

1.1 匿名管道

匿名管道特点

  1. 只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信;通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可应用该管道。
  2. 管道提供流式服务
  3. 一般而言,进程退出,管道释放,所以管道的生命周期随进程
  4. 一般而言,内核会对管道操作进行同步与互斥(互斥可以对数据进行保护)
  5. 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道

#include <unistd.h>
功能:创建- - -匿名管道
原型int pipe(int pipefd[2]); 数组传参会发生降维,这里就其实传的是一个指针
参数fd:文件描述符数组,其中pipefd[0]表示读端, pipefd[1]表示写端
返回值:成功返回0,失败返回错误代码
在这里插入图片描述

  #include<stdio.h>
  2 #include<unistd.h>
  3 #include<string.h>
  4 
  5 int main()
  6 {
   
   
  7   int pipefd[2] = {
   
   0};
  8                                                                                                                                                                                         
  9   pipe(pipefd);
 10 
 11   pid_t id 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值