news 2026/4/23 16:58:15

学习笔记——IPC(进程间通信)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
学习笔记——IPC(进程间通信)

IPC(进程间通信)

一、为什么需要IPC?

  • 进程空间都是独立的(虚拟地址空间隔离)

  • 但进程之间有数据共享交换需求

  • 需要一种机制让进程间能够通信

二、IPC通信方式分类

1. 古老的通信方式

  • 无名管道(匿名管道)

  • 有名管道(FIFO)

  • 信号(Signal)

注意:管道是自动申请资源并继续运行程序

2. IPC对象通信(System V IPC)

  • 消息队列(用的相对少,不讨论)

  • 共享内存

  • 信号量集

主要用于:System V、BSD、SUSE、Fedora、kernel.org等系统

3. Socket通信

  • 主要用于网络通信

  • 也可用于本地进程间通信

三、管道底层实现

  • 底层数据结构:队列(先进先出)

  • 无名管道(Unnamed Pipe)=>pipe

    • 只能用于有亲缘关系的进程通信(如父子进程)

四、管道特性

1. 工作模式

  • 半双工工作模式

  • 实际编程中,通常当作单工使用

2. 文件特性

  • 所有管道都是特殊文件

  • 不支持定位操作

    • lseek→ 用于文件描述符

    • fseek→ 用于FILE*

  • 建议使用文件IOopen,read,write,close

  • 可选使用标准IO(带缓冲区):fgets,fread,fgetc

3. 编程顺序

创建管道 → fork → 读写管道 → 关闭管道

五、管道行为分析

1. 写端行为

读端存在,一直向管道写: - 超过64K(默认缓冲区大小)→ 写会阻塞 - 原因:写段写的太快

2. 读端行为

写端存在,从管道读: - 如果管道为空 → 读会阻塞 - 原因:读段读的太快

3. 管道破裂(Broken Pipe)

读端关闭,继续写管道: - 导致写段进程收到SIGPIPE信号 - 默认行为:进程退出

4. 管道结束

写端关闭,读管道: - 如果管道没有内容 → read返回0 - 表示:进程间通信结束

六、有名管道(FIFO)

1. 特点

  • 有名管道 =>fifo

  • 可以用于任意单机进程通信

  • 在文件系统中可见(有文件名称)

2. 编程步骤

创建有名管道 → 打开有名管道 → 读写管道 → 关闭管道 → 卸载有名管道

3. 特性

  • 具有无名管道所有特性

  • 额外特性

    • 如果有一端没有打开

    • open函数会阻塞直到另一端也打开

七、相关函数

1.pipe函数

int pipe(int pipefd[2]);
  • 功能:创建并打开一个无名管道

  • 参数

    • pipefd[0]→ 无名管道的固定读端

    • pipefd[1]→ 无名管道的固定写端

  • 返回值

    • 成功:0

    • 失败:-1

2.mkfifo函数

int mkfifo(const char *pathname, mode_t mode);
  • 功能:在指定路径下创建有名管道文件

  • 参数

    • pathname→ 要创建的有名管道路径+名称

    • mode→ 八进制文件权限(如0666)

  • 返回值

    • 成功:0

    • 失败:-1

八、使用场景对比

特性无名管道有名管道
关系要求必须有亲缘关系任意进程
文件可见性不可见文件系统可见
创建方式pipe()mkfifo()
打开阻塞不适用open会阻塞
生命周期随进程结束持久存在直到删除

九、注意事项

  1. 管道是半双工的,但通常按单工使用

  2. 管道不能定位,只能顺序读写

  3. 注意处理管道破裂(SIGPIPE信号)

  4. 读写阻塞是正常现象,需要合理设计程序逻辑

  5. 及时关闭不需要的文件描述符,避免资源泄漏

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:01:12

小程序计算机毕设之基于springboot+微信小程序的快递代取系统的设计与实小程序基于微信小程序的校园快递代领平台设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/23 11:36:32

[C++]mpi安装后测试代码

CMakeLists.txtinclude_directories("C:/Program Files (x86)/Microsoft SDKs/MPI/Include") link_directories("C:/Program Files (x86)/Microsoft SDKs/MPI/Lib/x64")# 查找 OpenMP(重要!) find_package(OpenMP REQUIR…

作者头像 李华
网站建设 2026/4/23 14:50:10

2026大专会计应届生考证求职指南

会计行业核心证书 注册会计师(CPA)是国内会计行业含金量最高的证书,考试科目包括会计、审计、财务成本管理、经济法、税法和战略与风险管理。通过CPA考试能显著提升求职竞争力,尤其在会计师事务所和大型企业财务部门。 初级会计…

作者头像 李华
网站建设 2026/4/22 21:37:43

揭秘多态编程:重载、抽象与虚方法

《多态之函数重载》封装 继承 多态 抽象多态:同一个方法不同形态体现,多态分静态多态和动态的多态静态多态:函数重载和符号重载动态多态:抽象和虚方法函数重载:在同一个范围内,函数名一样,参数的…

作者头像 李华
网站建设 2026/4/23 9:56:12

小程序毕设项目:基于springboot+微信小程序的快递代取系统的设计与实小程序(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/23 13:17:27

绿色工厂认证:制造业绿色转型的必经之路

在“双碳”目标引领下,绿色发展已成为制造业转型升级的核心方向。绿色工厂认证作为衡量企业绿色制造水平的权威标尺,正推动越来越多企业走上“用地集约化、原料无害化、生产洁净化、废物资源化、能源低碳化”的发展道路。这一认证不仅是企业履行环保责任…

作者头像 李华