父子进程间通信(一) —— 匿名管道的创建和使用

本文探讨了进程间通信的基本原理,重点介绍了Linux中的匿名管道如何通过pipe函数在父进程和子进程中实现数据传递。通过实例演示了创建管道、通信过程和常见情况处理,适合理解进程间协作与管道机制。

进程之间可能存在协同工作的场景,一个进程把自己的数据交付给另一个进程,让其进行处理,如:

cat file.txt | wc -l

执行cat指令会触发一个进程,执行完cat file.txt 能读取到file.txt文件的内容,然后将读取结果通过管道交付给下一个进程wc,让wc来统计file.txt文件有多少行内容

这就是进程间通信的方式之一 —— 管道


目录

一、进程间通信的本质前提

二、管道的作用原理

 三、管道创建函数pipe

1、pipe函数的声明

2、pipe函数的使用


一、进程间通信的本质前提

因为进程之间具有独立性,一个进程是看不到另一个进程的资源的!!

两者在这种水火不容的情况下,要如何进行通信呢?? 答案是 给他们一块公共资源(公共内存)

这块内存不属于任何进程!!如果属于进程A,那么进程B能访问到这块公共资源,这就打破了进程的独立性原则,所以这块公共资源属于OS

 所以进程间通信的前提就是 有一块双方都能访问的公共资源,这块资源是属于OS的

二、匿名管道的作用原理

下面以父子进程为例,介绍管理的作用方式

一个进程如果要向磁盘写入数据,那么必会先得到写入文件的文件描述符fd ——》 找到对应文件的struct file ——》 调用文件操作函数 ——》向文件内核缓冲区写入数据 ——》OS定时调用驱动函数 write_disk 向磁盘写入数据

现在我们通过fork()创建了一个子进程,子进程会拷贝父进程的进程控制块和struct files,此时两个进程就有了一块公共资源 struct file

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值