Linux-IPC进程间通信

发布时间:2026/11/2 1:55:02
Linux-IPC进程间通信

interprocess communicate

为什么需要ipc ,进程空间都是独立。但是进程和进程之间有数据共享或交换的需求。

一、种类

1、古老的通信方式:

管道的底层实现是 队列。

1)无名管道

2)有名管道

3)信号

2、IPC对象通信

system v BSD suse fedora kernel.org

消息队列(用的相对少) 共享内存 信号量集

3、socket通信

网络通信

二、无名管道(匿名管道) unnamed pipe

无名管道 ==》 pipe ==》只能给有亲缘关系进程通信

管道的特性:

1、管道是 半双工的工作模式 , 实际编程使用,会当单工使用。

2、所有的管道都是特殊的文件不支持定位操作。如lseek->> fd fseek ->>FILE*

3、管道是特殊文件,读写(首选)使用文件IO ,open,read,write,close; 可选(标准io带缓存区) fgets,fread,fgetc,

管道容易发生的状态:

编程顺序:

创建管道 ==》fork ==》读写管道 ==》关闭管道

三、有名管道

有名管道 ===》 fifo ==》 可以给任意单机进程通信.有文件名称的管道。文件系统中可见

编程步骤:创建有名管道 ==》打开有名管道 ==》读写管道 ==》关闭管道 ==》卸载有名管道

特性:和匿名管道特性一致。 额外的, 如果有一端没有打开,则默认在open函数部分阻塞。

四、信号通信

1. 应用

异步通信。 通知机制。 随机事件

2. 信号发送和接收的过程

1) 根据需要(随机事件)发生信号。

2) linux 接收到信号发生请求,在pcb的链表中,查找对应的pid号(1000)

3) 找到对应进程后,使原来工作流程先暂停下,执行pcb 中,信号处理函数 对应下标的函数。

例如:如果发送 信号2 ,则调用handle2

4)当handle2 执行完毕后,原来进程的代码,继续运行。

3. 系统中对信号的说明和相关默认处理行为

man 7 signal

4. 信号相关函数

五、共享内存

由 system V (unix 操作系统) 提供一种进程间通信的方式。

1. 函数调用的步骤

key ==》申请对象 ==》映射对象 ==》读写对象 ==》撤销映射 ==》删除对象

2. 与管道相关区别

1)对于读写进程而言, 双方都可以读写

2)没有读阻塞

3)没有写阻塞。 共享内存需要和其他ipc(信号,或信号量集(同步操作)) 进行搭配使用

4)是一个初级内存区域 (像字符数组)

5)不删除数据,数据保持的

6)相对来说,共享内存空间可以自定义(4K *n ), 大空间

3. 相关函数接口

4. 相关命令