linux进程间通信的方式

本文详细介绍了进程间通信中的管道机制,包括其创建、原理、特点(如数据单向流动和不可反复读取)、局限性以及为何仅限于父子进程间的使用。同时提到了其他通信方式,如信号和本地套接字作为对比。
摘要由CSDN通过智能技术生成

引用:GitHub - jiong1998/Linux-.github.io: Linux系统编程【文件IO、进程、进程间通信、信号、多线程、互斥】:个人源码+个人笔记

在进程间完成数据传递需要借助操作系统提供特殊的方法,现今常用的进程间通信方式有:

管道: PIPE、FIFO (使用最简单)

        pipe(匿名管道)

        fifo(命名管道)

        管道是一种最基本的IPC机制,也称匿名管道,应用于有血缘关系的进程之间,进行数据传递。调用pipe函数即可创建一个管道。

管道的特点

- 管道的本质是一块内核缓冲区 ,**数据只要读就没了。**(防止管道满)

- 由两个**文件描述符引用**,一个表示读端,一个表示写端。

- 规定数据从管道的写端流入管道,从读端流出。

- 当两个进程都终止的时候,管道也自动消失。

- <font color='red'> 管道的读端和写端默认都是**阻塞**的</font>

注意:父进程创建管道,子进程会继承。

**原理:**

- 管道内部使用**环形队列**实现。

- 默认缓冲区大小为4K,可以使用ulimit -a命令获取大小。

- 实际操作过程中缓冲区会根据数据压力做适当调整。

**局限性**:

- 数据一旦被读走,便不在管道中存在,**不可反复读取**。

- **数据只能在一个方向上流动**,若要实现双向流动,必须使用两个管道

- 只能在**有血缘关系的进程间**使用管道。

为什么管道只能在有血缘关系的进程间使用:

&emsp;&emsp;管道的两端是通过文件描述符表示的,如果是两个毫不相关的进程,在一个进程内创建了管道,没办法让另一个进程获得该管道的文件描述符。但是在父子进程中就可以。

信号 (开销最小)

共享映射区 (无血缘关系)

本地套接字 (最稳定)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值