我是靠谱客的博主 英勇大象,最近开发中收集的这篇文章主要介绍【Linux】管道实现通信管道的原理:管道的规则:匿名/命名:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

管道的原理:

管道的规则:

匿名/命名:


管道的原理:

        我们知道每个进程都是独立的,如果想要两个进程保持独立性的同时,还能够直接通信,那将会很麻烦,所以一般我们采用的都是间接的方法。

        比如一个商场里面,一家店搞促销,举办了一个抽奖的活动,买了多少元的物品后可以来抽奖,老板把奖品的名字都写在一个个卡片上,放到了一个只有上端开口的盒子里面,路人从里面拿去一个卡片兑奖。

        大家看到这里的老板和路人就相当于是两个进程,现在他们呢看到了同一份资源--盒子,他们通过盒子 输入/读取 信息,最终拿到信息。一样的道理,在Linux中进程间的通信都是要让两个进程看到同一份资源,fork()函数是一个创建子进程的函数,我们在用fork()函数打印信息的时候,为什么和我们的父进程打印的信息显示在同一个终端上,也就是此时我们的父子进程都能看到这一份文件,才能往里面打入信息。

        我们创建一个文件,系统会从磁盘拿属于这个文件的文件信息放进去,我们的进程的内部有一份tast_struct 和 struct file *array[]  ,这个数组是一个存放文件指针的映射表,我们的进程可以在这张表中可以找到自己想要的文件,fork()的时候,这张表也会被拷贝,这张表的0、1、2 正对应着输入、输出、错误这三个流,所以子进程透过这张表看到的文件是和父进程一样的  

管道的规则:

         管道必须是单向的,一个进程是读那么另一个就必须是写 

        我们在读取的时候,如果管道为空,那么进程会进入管道资源的等待队列

        写入的时候,如果管道是满的,也是一样的道理

一般而言,进程退出,管道释放,所以管道的生命随周期随进程

管道是半双工的,数据只能向一个方向流动,想要双方通信,需要建立两个管道

每个被打开的文件都有一个属于的引用计数,每有一个进程关闭这个文件,引用计数减减,为0,自动释放

匿名/命名:

匿名管道:子进程继承父进程

命名管道:通过一个fifo文件,这个文件是具有唯一路径的,通过磁盘

这个是Linux下的接口,第二个参数是权限参数,设定前可以用umask设定默认权限 

最后

以上就是英勇大象为你收集整理的【Linux】管道实现通信管道的原理:管道的规则:匿名/命名:的全部内容,希望文章能够帮你解决【Linux】管道实现通信管道的原理:管道的规则:匿名/命名:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部