操作系统之进程通信

最近面试被问到进程之间通信,虽然知道有两种,但是其实不是很明白其中原理,经过自己的查阅今天就来记录一些
一下内容 大部分来自 公众号 小林coding 这个人讲的很不错 大家可以去看下
然后我就自己总结一下

进程通信方式

管道

每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。

其实,所谓的管道,就是内核里面的一串缓存。从管道的一段写入的数据,实际上是缓存在内核中的,另一端读取,也就是从内核中读取这段数据。另外,管道传输的数据是无格式的流且大小受限。

我们可以使用 fork 创建子进程,创建的子进程会复制父进程的文件描述符,这样就做到了两个进程各有两个「 fd[0]fd[1]」,两个进程就可以通过各自的 fd 写入和读取同一个管道文件实现跨进程通信了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FpsYHa0h-1596807988414)(C:\Users\lige\AppData\Roaming\Typora\typora-user-images\1596766346219.png)]

在linux可以通过mkfifo这个命令来创建一个管道或者说 | 也代表一个管道

不管是匿名管道还是命名管道,进程写入的数据都是缓存在内核中,另一个进程读取数据时候自然也是从内核中获取,同时通信数据都遵循先进先出原则,不支持 lseek 之类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值