当前位置: 首页 > article >正文

【Linux系统】进程间通信:认识命名管道




在这里插入图片描述



认识命名管道


1、命名管道的概念

  • 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信,即需要存在子进程继承父进程资源这层关系。
  • 如果我们想在不相关的进程之间交换数据(即在任意两个进程间通信),可以使用 FIFO 文件来做这项工作,它经常被称为命名管道。
  • 匿名管道是一种特殊类型的文件。


2、创建一个命名管道


创建命名管道:用命令创建

命令 mkfifo [name] :创建一个 命名管道

在这里插入图片描述



实现进程间通信:

(1)使用命令在当前目录下创建一个命名管道文件:myfifo
在这里插入图片描述

(2)同时开两个窗口,各自开一个进程,进程一向命名管道中写入 hello world,另一个进程接收到了信息!

在这里插入图片描述

创建命名管道:程序中代码创建

在这里插入图片描述

int main(int argc, char *argv[])
{
    mkfifo("p2", 0644);
    return 0;
}



3、匿名管道与命名管道的区别

  • 匿名管道由 pipe 函数创建并打开。
  • 匿名管道由 mkfifo 函数创建,打开该文件用 open
  • FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一旦这些工作完成之后,它们具有相同的语义。



4、命名管道原理与设计的理解


为什么叫做命名管道?

  • 命名管道是一个真正存在的文件,它有自己的路径+文件名 ------代表-----> 具有唯一性!
  • 它也有自己的 inode,也是一种磁盘文件。

在这里插入图片描述



IPC的本质是什么:先让不同的进程,看到同一份资源!

命名管道的唯一性就可以让不同的进程,用同一个文件系统路径找到并操作同一个资源!!



🐻问题:既然命名管道是磁盘文件,我们可不可以使用一个普通文件充当这样的命名管道?

答:可以,但是不好! 普通文件和命名管道存在较大区别,管道文件是专门设计出来用于进程间通信,必然有其独特之处,它们的区别如下:



普通文件和命名管道的区别:

  • 管道文件无需刷新数据到磁盘: 普通文件写入修改数据都要刷新到磁盘中,而命名管道文件不用
  • 管道文件缓冲区容量较小: 只要磁盘不满,理论上普通文件可以不断写入,而命名管道文件会满,满了就自动停止写入
  • 管道文件存在通信保护机制: 多个进程操作同一个普通文件,可能会造成读写不一致,数据不一致的问题,而命名管道文件有互斥等保护机制

这几点都说明了管道文件是被特殊设计过的,俗话说:“术业有专攻”专业的事交给专业的人做!



🐻问题:为什么需要给命名管道文件创建一个磁盘文件结构,存储与磁盘中呢?

答:其实就是为了给他赋予一个文件名和路径,而其他操作都被特殊处理了!虽然命名管道是磁盘文件,但是很多磁盘文件的操作和功能都不会使用。命名管道文件只使用内核级缓冲区。



命名管道通信代码实现

由于篇幅限制,具体的讲解和实现放置于本篇博客:【Linux系统】进程间通信:实现命名管道通信


http://www.kler.cn/a/525788.html

相关文章:

  • 【自学笔记】计算机网络的重点知识点-持续更新
  • 剑指 Offer II 007. 数组中和为 0 的三个数
  • 实时数据处理与模型推理:利用 Spring AI 实现对数据的推理与分析
  • 使用Python爬虫获取1688商品拍立淘API接口(item_search_img)的实战指南
  • 1.27补题 回训练营
  • Hive安装教程
  • windows10 配置使用json server作为图片服务器
  • 笔记:使用ST-LINK烧录STM32程序怎么样最方便?
  • 设计模式Python版 适配器模式
  • Vue.js 响应式引用与响应式数据(`ref` 和 `reactive`)
  • 【Python】深入探索Python元类:动态生成类与对象的艺术
  • 深入解析JPA中的多对多关系映射
  • Java---猜数字游戏
  • wordpress每隔24小时 随机推荐一个指定分类下的置顶内容。
  • 【Elasticsearch 】自定义分词器
  • Pyside6(PyQT5)的QSqlQueryModel的常用方法
  • 【C语言】main函数解析
  • 上位机知识篇---GitGitHub
  • 在MIMIC IV数据库的derived中有bg、chemistry和vitalsign,它们都有Glucose指标,如何区分?
  • C++并发编程指南06
  • 基于springboot的校园部门资料管理系统
  • 搜索引擎快速收录:关键词布局的艺术
  • DeepSeek回答人不会干出超出视角之外的事
  • 高速PCB设计指南4——叠层设计与PCB技术
  • 【CS61A 2024秋】Python入门课,全过程记录P4(Week7 Generators开始,更新于2025/1/30)
  • 使用langchain ollama gradio搭建一个本地基于deepseek r1的RAG问答系统