进程间通信(管道,共享内存,消息队列,信号量)

今天我们来讲进程间的通信!

首先我们来看进程间通信的目的!

总的来说就是为了实现进程间的协同!

然后首先我们来了解一个前提!

只要能看到同一份资源,两个进程就完成了进程间的通信!并且该资源不能由进程两方任意一方拥有!必须由稳定的第三方提供(一般就是操作系统),然后两方申请这个资源然后进行通信!

由此就衍生出了管道,system v,posix通信

其中system v一般用于本地两个进程间的通信。

posix进程间通信则是用于网络通信的(网络部分我们再讲)

所以我们首先来讲管道

1:匿名管道

我们先讲匿名管道。

首先我们看上图,我们就可以知道在创建子进程的时候,会浅拷贝fd表,这样两个进程就会指向同样的资源!

这样我们就可以创建一个管道文件帮助完成父子进程之间的通信!

并且这个通信不用借助磁盘是一个内存级的通信,所以这个管道就被称为匿名管道!

然后为了我们实现的方便,我们的管道只能进行单向通信

匿名管道是Linux中一种非常古老的进程间通信方式,实际上是由内核管理内核中的一块缓冲区,本质就是一个内存级的文件,但它没有名字,所以称之为“匿名管道”。这种通信方式主要用于父子进程间的通信,父进程和子进程共同使用这个管道文件来传输数据。

如果想要父子进程互相通信,我们就必须建立两个管道文件然后再进行互相通信!

接下来我们就来看如何创建和使用匿名管道!

首先我们来看一下创建管道的原理

然后我们就开始实操,创建管道和子进程

然后再让父子关闭相应的进程。

然后我们再完善子进程写入的代码以使实验效果更明显。

其中snprintf是一个在C语言中使用的函数,用于格式化字符串并将结果写入指定的缓冲区中。它类似于printf函数,但可以将格式化后的字符串输出到一个指定大小的字符数组中,从而避免缓冲区溢出的问题。snprintf函数的主要作用是将格式化的数据(如数字、字符串等)转换为一个字符串,并将该字符串写入到一个指定的缓冲区中,以便后续处理。因此,snprintf是一种常用的格式化输出函数,可以将指定格式的内容写入指定长度的缓冲区中。

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值