Linux || 进程通信(IPC)
2021/11/15 7:10:12
本文主要是介绍Linux || 进程通信(IPC),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 进程间通信
- 管道
- 1. 有名管道
- 2. 无名管道
- 信号量
- 共享内存
- 原理
- 有关函数
- 消息队列
- 相关函数
进程间通信
进程间通信方式:管道 信号量 套接字 共享内存 消息队列
管道
#include<sys/types.h> #include<sys/stat.h>
1.打开管道 在内存中分配空间
2.向管道写数据 实际是写到内存中
3.读取 从内存中读
4.大小为0
5.写端关闭 读端read()返回0
读端关闭 写端写入数据产生异常 收到异常信号SIGPIPE
6.管道属于半双工 同一时间内数据只能向一个方向传输
1. 有名管道
可以在任意两个进程之间通信
int mkfifo(const char* filename,mode_t mode); //管道名 权限
创建: 1. 命令创建: mkfifo
2. 系统调用创建
2. 无名管道
主要是用于在父子进程之间通信
int pipe(int fd[2]);//成功返回0 失败返回-1 fd[0] //管道读端描述符 fd[1] //管道写端描述符
信号量
信号量一般取正数值,它的值代表允许访问的资源数目,信号量主要用于同步进程
获取资源时,需要对信号量的值进行原子减一,P操作,当信号量值为0时,代表没有资源可用,P操作会阻塞
释放资源时,需要对信号量的值进行原子加一,V操作,
信号量的值如果只取0,1,将其称为二值信号量
信号量的值大于1,称之为计数信号量
临界资源:同一时刻,只允许被一个进程或线程访问的资源
临界区:访问临界资源的代码段
共享内存
为多个进程之间共享和传递数据提供了一种有效方式
原理
- 先在物理内存上申请一块空间
- 多个进程可以将其映射到自己的虚拟地址空间中,所有进程都可以访问共享内存中的地址
- 如果某个进程向共享内存写入了数据,所做的改动会立刻被可以访问同一段共享内存的任何其他进程看到
有关函数
#include<sys/ipc.h> #include<sys/shm.h> #include<sys/types.h> int shmget(key_t key,size_t size,int shmfig); //成功返回共享内存的ID,失败返回-1 int shmdt(const void * shmaddr); //断开当前进程的shmaddr指向 的共享内存映射 int shmctl(int shmid,int cmd,struct shmid_ds * buff); //控制共享内存
消息队列
消息队列是一个消息的链表,有写权限的进程可以向消息队列中添加新消息,有读权限的进程可以从消息队列中独奏消息
相关函数
- 创建或获取一个消息队列
msqflg : IPC_CREAT
int msgget(key_t key,int msqflg);
- 发送一条消息,成功返回0,失败返回-1
msqsz:指定mtext中有效数据的长度
msqflg:一般设置为0 IPC_NOWAIT
int msgsnd(int msqid,const void * msqp,size_t msqsz,int msqflg);
- 接收一条消息,成功返回mtext中接收到的数据长度,失败返回-1
msqtyp:指定接收的消息类型 0
msqflg:一般设置为0 IPC_NOWAIT
ssize_t msqrcv(int msqid,void * msqp,size_t msqsz,long msqtyp,int msqflg );
- 控制消息队列,成功返回0
cmd:IPC_RMID
int msqctl(int msqid,int cmd,struct msqid_ds * buff);
这篇关于Linux || 进程通信(IPC)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法
- 2024-08-21【Linux】gnome桌面环境切换KDE Plasma
- 2024-08-19如何安装 VMware Tools (macOS, Linux, Windows)
- 2024-08-15Linux部署Scrapy教程:入门级指南