进程间通信(IPC机制):无名通道与有名通道

IPC 进程间通信 interprocess communicate

三大类:

(同一主机进程间通信)

1、古老的通信方式

无名管道

有名管道

信号

2、IPC对象通信 system v

共享内存*

消息队列

信号量集

(主要用在不同主机进程间通信)

3、socket通信

网络通信

1.无名通道

无名管道: 只能用在具有亲缘关系的进程间通信(父子进程)。

操作流程:

  1. 创建并打开管道 :pipe()

  2. 读管道:read();

  3. 写管道:write();

  4. 关闭管道:close();

cpp 复制代码
int pipe(int pipefd[2]);
功能:创建并打开一个无名管道
参数:
    pipefd:管道读端和写端的文件描述符
    pipefd[0] 读端
    pipefd[1] 写端
返回值:
    成功:0
    失败:-1

管道的特点:

管道本质是内核中的一段缓冲区,默认64K字节,遵循队列存储方式(FIFO)。

  1. 写阻塞:当管道的读写端都存在时,管道写满数据时,发生写阻塞。

  2. 读阻塞:当管道的读写端都存在时,管道为空时,读管道发生读阻塞。

  3. 读返回0:当管道没有写端,只有读端时,管道中有数据则读出数据,无数据时,不再读阻塞,读管道直接返回0字节。

  4. 管道破裂:当管道没有读端,向管道中写数据,发生管道破裂异常。

2.有名管道

有名管道: 可以用在同一主机,任意进程间通信。

  1. 创建有名管道文件: mkfifo();

  2. 打开管道文件 :open();

  3. 写管道文件:write();

  4. 读管道文件:read();

  5. 关闭管道文件:close();

相关推荐
发量惊人的中年网工9 小时前
服务器托管一个机柜一年多少钱?2026年9月最新机柜租用价格参考
运维·服务器·网络
星恒随风9 小时前
Linux进程基础(二):进程调度、上下文切换、O(1)调度器、环境变量与虚拟地址空间
linux·笔记·学习·状态模式
fundoit9 小时前
资源服务器如何对 JWT 进行验签
java·运维·服务器·spring boot·php·oauth2
云贝贝贝9 小时前
【无标题】TDSQL 分片键怎么选?选错等于数据倾斜加跨分片慢查询
运维·服务器·数据库·腾讯云
浪子明X9 小时前
AI 日报自动化:先把事实、时间和引用做成可检查的编辑流水线
运维·人工智能·自动化
hzxpaipai9 小时前
AI把网站页面做出来了,谁来负责后台、服务器和正式上线?
运维·服务器·人工智能
xbzb9 小时前
一边装一边报错:CentOS 7 + LNMP 跑 ECShop 的常见故障与解法
linux·运维·centos
遇印记9 小时前
数据通信初步
运维·服务器·网络·windows·学习
学linux的QQ蛋9 小时前
图解 Linux 驱动编译进内核的完整工作流程
linux·运维·服务器
承渊政道9 小时前
Linux网络学习【UDP Socket编程实战:网络命令与客户端访问Linux验证】
linux·网络·学习·ubuntu·编程实战·udp socket