学习笔记——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. 及时关闭不需要的文件描述符,避免资源泄漏

相关推荐
梦想的旅途22 分钟前
企微社群裂变实战:自动化群接龙与活动打卡系统搭建
运维·自动化·企业微信
Neolnfra10 分钟前
使用 Netdata 给服务器增加一个实时监控面板
运维·服务器
鱼子星_13 分钟前
【C++】反向迭代器:反向迭代器的底层认识与模拟实现
开发语言·c++·笔记·stl
Wang's Blog16 分钟前
AI Agent白手起家63: LangGraph 人机交互——让人类介入 AI 工作流
人工智能·算法·人机交互
@松30 分钟前
STM32F103C8-GPIO—位带操作学习
stm32·嵌入式硬件·学习
chusi77731 分钟前
2027考研历年真题+电子备考资料+电子版教材+笔记
笔记·考研
Delite80236 分钟前
磷酸酯抗燃油矿物油检测技术及多行业应用场景解析
网络·安全
聚美智数38 分钟前
SSL证书信息查询-SSL域名解析-SSL证书查询服务-SSL证书解析服务API接口介绍
网络·网络协议·ssl
酷可达拉斯39 分钟前
自动化运维-Ansible触发器与变量
运维·服务器·自动化·ansible