linux进程间通信(IPC 工具)
0.简介
IPC工具分为3类:
通信:即进程间数据的交换。
同步:即进程和线程操作的先后顺序控制。
信号:可以作为进程间同步、数据交换的一种技术。
如图:
IPC通信可以分为两类:数据传输工具和共享内存,数据传输是一端用户程序将数据写入内核,另一端的用户程序从内核取出数据。共享内存,允许进程间将数据放入共享内存中完成数据交换,速度最快。
IPC同步技术有:信号量、文件锁、互斥体与条件变量。
在程序中使用这些工具,都有唯一的标识符进行区分,如下图:
这些IPC工具在程序中使用可访问和持久性如下表:
1.管道与FIFO
管道是非常古老的IPC方法,在shell命令行也用过。
例如:ls | wc -l
这个命令就是创建两个进程执行ls和wc命令,将执行ls命令的进程标准输出连接到管道的写入端,执行wc命令的进程将标准输入连接到管道的读出端。一个管道是一个字节流,且只能按顺序读写,不能随机读写,管道是单向的(也有双向管道,替换方案是 UNIX domain 流socket对),可以确保在一个时刻写入不超过PIPE_BUF(4096)字节的操作都是原子的,管道的储存能力为65536字节。
创建管道:
#include<unistd.h> int pipe(int filefds[2]); //0 success,-1 error ,filefds[0] read,filefds[1] write
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App