千家信息网

Linux管道的示例分析

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章给大家分享的是有关Linux管道的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。管道是最早出现的进程间通信的手段,在shell中执行命令,经常会将上一个命令
千家信息网最后更新 2024年11月18日Linux管道的示例分析

这篇文章给大家分享的是有关Linux管道的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

管道是最早出现的进程间通信的手段,在shell中执行命令,经常会将上一个命令的输出作为下一个命令的输入,由多个命令配合完成一件事情。管道的作用是在有亲缘关系的进程之间传递消息,因为共同主先进程调用过pipe函数,打开的管道文件就会在fork之后,被各个后代进程所共享,打开的管道可以由其中一个进程写入数据,然后另一个具有亲属关系的进程读取。

严格来说,家族里面的多个进程都可以往同一个秘密场所里面扔消息,也可以都从同一个秘密场所里面取消息,但是真的这么做的话又会存在风险。管道实质是一个字节流,并非前面提到的消息,没有消息的边界。如果多个进程发送的字节流混在一起,则无法辨认出各自的内容。所以一般是两个有亲缘关系的进程用管道来通信。

一般来讲,进程中数据流是单向的,并且是阅后即焚的。管道是一种文件,可以调用read、write和close等操作文件的接口来操作管道。另一方面管道又不是一种普通的文件,它属于一种独特的文件系统:pipefs。管道的本质是内核维护了一块缓冲区与管道文件相关联,对管道文件的操作,被内核转换成对这块缓冲区内存的操作。

Linux下创建管道函数:

int pipe(int pipefd[2])

成功调用pipe函数之后,会返回两个打开的文件描述符,一个是管道的读取端描述符pipefd[0],另一个是管道的写入端描述符pipefd[1]。管道没有文件名与之关联,因此程序没有选择,只能通过文件描述符来访问管道,只有那些能看到这两个文件描述符的进程才能够使用管道。如果进程执行了fork操作,那么管道就变成如下所示:

一般来说管道是单向使用,所以fork之后,新老进程一个会关闭write fd,另一个会关闭read fd,避免读写混淆。在shell中执行管道命令就是这种情景,只是略有特殊之处,其特殊的地方是管道描述符占用了标准输入和标准输出两个文件描述符。

单向使用管道,也就是说,如果没有用到管道的进程应该尽早释放管道文件fd,这么做不仅仅是为了让数据的流向更加清晰,也不仅仅是为了节省文件描述符,更重要的原因是:关闭未使用的管道文件描述符对管道的正确使用影响重大。

管道有如下3个特性:

  • 只有当所有的写入端描述符都已关闭,且管道中的数据都被读出,对读取端描述符调用read函数才会返回0(即读到EOF标志)。

  • 如果所有读取端描述符都已关闭,此时进程再次往管道里面写入数据,写操作会失败,errno被设置为EPIPE,同时内核会向写入进程发送一个SIGPIPE的信号。

  • 当所有的读取端和写入端都关闭后,管道才能被销毁。

管道的本质是一片内存区域,默认大小是65536字节,不过可以调用fcntl来获取和修改这个值的大小。因此在使用管道的过程中要注意写入数据是否能及时消费的问题,一旦管道满了,写入就会被阻塞;对于读取端,要及时地读取,防止管道被写满,造成写入阻塞。

上面说的都是常见的管道形式,也就是匿名管道,因为没有实体文件与之关联,所以只能在具有亲属关系的进程间使用。因此就出现了另一种管道形式,命名管道,其最大的差别就是有实体文件与之关联。由于存在实体文件,不相关的没有亲缘关系的进程也可以通过使用FIFO来实现进程之间的通信。

创建命名管道函数如下:

int mkfifo(const char *pathname, modt_t mode)

命名管道支持的管道操作和匿名管道是一样的,只不过它多了一个关联文件,有文件名,这样任何进程通过文件名来使用它而已。

感谢各位的阅读!关于"Linux管道的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

管道 文件 进程 数据 函数 命令 关联 两个 消息 亲缘 内容 内核 单向 多个 实体 文件名 通信 示例 分析 特殊 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 药店医保网络安全管理制度 wps连接数据库打印标签 软件开发app开题报告 全国三级数据库技术证书长啥样 信息系统安全和网络安全 山东2u机架式网络安全硬件设备 实时数据库报价 cifs服务器 学生管理系统服务器端设计 网络服务器需要买吗 excel自定义排序数据库 苏州银行的软件开发岗待遇 反恐怖网络安全宣传活动开展情况 北京网吧网络安全员考试题 山东春考数据库 高职学计算机网络技术 k3登陆显示rpc服务器不可用 美国网络安全行政令 大专计算机网络技术考试难吗 网络安全法国家关键信息基础设施 上海个人软件开发统计 计算机也有网络技术基本知识 科技互联网转型 网络安全防护应急预案 tp5调试模式可以看到数据库吗 网络安全法自起实施行 城投公司网络安全自查报告 魅族手机服务器没响应怎么解决 三调数据库怎么做 成都专业软件开发大概要多少钱
0