进程间通信

本文详细介绍了Linux系统中六种主要的进程间通信方式:管道(无名和有名)、信号、消息队列、共享内存、信号量和socket,探讨了它们的工作原理、应用场景和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.linux 进程间通信方式主要有6中:

1.管道,有名管道:管道用于具有亲缘关系进程间的通信,又名管道则还允许无亲缘关系进程间的通信。

2.信号,

3.消息队列

4.共享内存

5.信号量,:作为进程间或者同一进程的线程间的同步和互斥。

6.socket

1.管道

管道:把一个程序的输出直接连接到另一个程序的输入。

1.1 无名管道

a,亲缘进程间,半双工,存在内核中

b,当一个管道建立适合,他会创建两个文件描述符 fds[0](读管道),fds[1](写管道),管道关闭时,依次close即可

c. 

// 管道创建
int pipe (int fd[2]);

一般的,pipe 实在一个进程中创建的,因此,可以在fork一个子进程,pipe 两个fd就被继承了,然后close一方的读,另一方的写,就产生了一个通道,无名管道都是在内核中的,这个数据写了,另外一方不读,就会阻塞住。

1.2 有名管道FIFO

int mkfifo(const char * filename ,mode_t mode)

管道创建成功皇后,可以使用open,read,write

2.信号

软件层次上对中断机制的模拟。原理上,一个进程收到一个信号和处理器接受到中断请求是一样的。

信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以用信号来通知用户空间进程。

来源:硬件来源和软件来源

软件来源(kill,raise,alarm,settimer sigqueue)

响应信号一般(忽略,扑捉,执行默认操作)

3.信号量

临界资源:

        硬件资源,处理器内存,存储器以及外围设备

        软件资源,共享代码段,共享结构,变量

1.使用semget函数创建或者获取已存在的信号量

2.初始化信号量

3.pv操作,semop 

4.删除 semctl

4.共享内存

1.最为有效的进程间通讯方式,内核专门留出一块内存,该段内存区域由要访问的进程映射到自己的私有地址空间,因此无需复制数据,直接读写这段内存。需要依靠同步机制。

1.创建共享内存 shmget

2.映射共享呢村 shmat

3.撤销映射 shmdt

5.消息队列

具有FIFO特性

1.创建或者打开 msgget

2.msgsnd

3.msgrcv

4.msgctl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值