进程之间可能存在协同工作的场景,一个进程把自己的数据交付给另一个进程,让其进行处理,如:
cat file.txt | wc -l
执行cat指令会触发一个进程,执行完cat file.txt 能读取到file.txt文件的内容,然后将读取结果通过管道交付给下一个进程wc,让wc来统计file.txt文件有多少行内容
这就是进程间通信的方式之一 —— 管道
目录
一、进程间通信的本质前提
因为进程之间具有独立性,一个进程是看不到另一个进程的资源的!!

两者在这种水火不容的情况下,要如何进行通信呢?? 答案是 给他们一块公共资源(公共内存)
这块内存不属于任何进程!!如果属于进程A,那么进程B能访问到这块公共资源,这就打破了进程的独立性原则,所以这块公共资源属于OS

所以进程间通信的前提就是 有一块双方都能访问的公共资源,这块资源是属于OS的
二、匿名管道的作用原理
下面以父子进程为例,介绍管理的作用方式
一个进程如果要向磁盘写入数据,那么必会先得到写入文件的文件描述符fd ——》 找到对应文件的struct file ——》 调用文件操作函数 ——》向文件内核缓冲区写入数据 ——》OS定时调用驱动函数 write_disk 向磁盘写入数据

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

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

被折叠的 条评论
为什么被折叠?



