news 2026/6/3 16:22:30

学习笔记——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/5/29 1:38:07

小程序计算机毕设之基于springboot+Android的研学旅行服务平台APP小程序设计研学产品展示(主题路线、课程安排、师资介绍)(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/6/2 10:43:14

小程序计算机毕设之基于springboot+微信小程序的宠物服务系统小程序基于微信小程序的宠物服务系统(完整前后端代码+说明文档+LW,调试定制等)

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

作者头像 李华
网站建设 2026/5/30 7:06:35

小程序毕设项目:基于springboot+微信小程序的宠物服务系统小程序(源码+文档,讲解、调试运行,定制等)

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

作者头像 李华
网站建设 2026/6/2 4:19:28

2025 年 IT 转行选什么?网络安全为何是首选方向?

2025年IT转行就业为什么首先要选网络安全? 记得曾经有人说过这样一个俗语:三百六十行,行行转IT。或许听到这个话的时候会觉得是一句玩笑话,但是浏览到网络上一些关于就业的文章,就能够明白这句话的真正意义所在。随着…

作者头像 李华
网站建设 2026/6/2 11:40:52

小白必看 SQL 注入教程:详细图解 + 基础原理,核心逻辑一看就懂

一、Sql注入简介 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。 二、Web 程序三层架构 三层架构(3-tier architecture) 通常意义上就…

作者头像 李华
网站建设 2026/6/3 8:59:15

【ACWing】153. 双栈排序

题目地址: https://www.acwing.com/problem/content/description/155/ Tom最近在研究一个有趣的排序问题。通过 2 2 2个栈S1和S2,Tom希望借助以下 4 4 4种操作实现将输入序列升序排序。 操作a:如果输入序列不为空,将第一个元素…

作者头像 李华