day32

第一部分:进程间通信概述

进程间通信的常见方式

· 管道(无名管道、有名管道)

· 信号

· 消息队列

· 共享内存

· 信号灯(信号量)

第二部分:无名管道

  1. 无名管道的特点

· 只能用于具有亲缘关系的进程间通信(如父子进程)。

· 管道本质上是一段位于内核空间的缓存区,读写两端通过文件描述符操作。

  1. 创建函数 pipe

· 创建一段用于进程间通信的内核缓存区。

· 通过两个文件描述符操作管道:读端和写端。

· 成功返回0,失败返回-1。

  1. 管道的读写特性

有写端存在时:

· 管道中有数据:直接读出。

· 管道中无数据:读端阻塞等待,直到有数据写入。

无写端存在时:

· 管道中有数据:直接读出。

· 管道中无数据:读端立即结束,不阻塞等待。

有读端存在时:

· 管道未写满(容量约64K):直接写入。

· 管道已写满:写端阻塞,等待数据被读取后才能继续写入。

无读端存在时:

· 写入数据会产生管道破裂错误,导致进程直接退出。

第三部分:有名管道

  1. 有名管道的特点

· 可用于任意两个进程间通信(无论是否具有亲缘关系)。

· 通过文件系统中的管道文件来标识,进程通过路径名访问。

  1. 阻塞特性

· 读写两端必须同时打开才能继续执行。

· 若只有一端打开(只有读端或只有写端),则该端会阻塞等待,直到另一端加入。

  1. 创建函数 mkfifo

· 在文件系统中创建一个有名管道文件。

· 需指定管道文件的路径和访问权限。

· 成功返回0,失败返回-1。

第四部分:信号

  1. 信号的概念

信号是内核层与应用层之间通信的一种机制,用于通知进程发生了某种事件。

  1. 进程收到信号后的三种处理方式

· 缺省:按照系统默认方式处理信号(如终止进程、忽略等)。

· 忽略:不处理该信号,信号对进程无影响。

· 捕捉:按照用户指定的方式处理信号,即注册自定义信号处理函数。

  1. 常见信号种类

· SIGINT:中断信号(Ctrl+C)

· SIGQUIT:退出信号(Ctrl+\)

· SIGKILL:强制终止信号

· SIGTERM:终止信号

· SIGSTOP:暂停信号

· SIGSEGV:段错误信号

· SIGPIPE:管道破裂信号

· SIGALRM:定时器信号

· SIGCHLD:子进程状态变化信号

第五部分:关键概念辨析

无名管道 vs 有名管道

· 无名管道:仅限亲缘进程,无文件名,通过文件描述符操作。

· 有名管道:任意进程可用,有文件名,通过路径打开操作。

信号 vs 管道

· 信号:异步通信机制,用于通知事件,传输信息量极少。

· 管道:同步通信机制,用于传输数据流,信息量大。

写端存在性对读端的影响

· 写端存在时读端若无数据会阻塞等待。

· 写端不存在时读端若无数据则直接结束(读到文件末尾)。

读端存在性对写端的影响

· 读端存在且管道满时写端阻塞。

· 读端不存在时写端写入会触发管道破裂信号。

相关推荐
我要 调查网16 分钟前
电商产品市场调查实施方案
经验分享
秃秃秃秃哇22 分钟前
orin上sensor一帧raw图大小的计算
linux
集芯微电科技有限公司23 分钟前
低压功率MOSFETs选型手册
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
byte轻骑兵31 分钟前
【BlueZ 】蓝牙配对/绑定基础:BlueZ 中安全机制的入门级源码解析
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
一条破秋裤34 分钟前
C-数据类型
c语言·开发语言·chrome
xx~t40 分钟前
嵌入式学习——进程与线程2
linux·c语言·学习·进程与线程
给AI剪纸的打工人1 小时前
OpenCode怎么接第三方API?自定义Provider与Responses配置实战
linux·数据库·人工智能
裕晟专利申请赵老师1 小时前
拥有专利不等于能自由销售,FTO检索到底查什么
经验分享
恒锐丰科技林技术员1 小时前
SS8870T:宽压高可靠直流有刷电机驱动芯片,机电设备动力控制优选
经验分享·硬件工程