千家信息网

Linux进程间通信的方式是什么

发表于:2024-10-22 作者:千家信息网编辑
千家信息网最后更新 2024年10月22日,本篇内容主要讲解"Linux进程间通信的方式是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux进程间通信的方式是什么"吧!·进程间通信:操作系
千家信息网最后更新 2024年10月22日Linux进程间通信的方式是什么

本篇内容主要讲解"Linux进程间通信的方式是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux进程间通信的方式是什么"吧!

·进程间通信:操作系统为系统提供的用于实现进程间通信的方式

进程之间是无法直接通信的,因为每个进程都有独立的虚拟地址空间,访问的都是自己的虚拟地址,因此进程具有独立性,无法直接通信

根据通信场景的不同,因此提供了多种不同的通信方式

进程间通信方式种类:管道、共享内存、消息队列、信号量

·管道

特性:半双工通信--可以选择方向的单向通信

本质:在内核中开辟一块缓冲区(内核空间中的一块内存)

原理:多个进程通过访问同一块内核中的缓冲区实现通信(复制缓冲区的操作句柄)

分类:匿名管道:缓冲区没有标识符,只能用于具有亲缘关系的进程间通信

命名管道:缓冲区具有标识符,可用于同一主机上任意的进程间通信

linux下一切皆文件--所有东西都是当做文件一样进行操作(包括管道),通过IO操作完成对管道的访问

·匿名管道

返回值:成功返回0;失败返回-1

特性:只能用于具有亲缘关系的进程间通信

匿名管道没有标识符,无法被其他进程找到,只能通过子进程复制父进程的方式获取到操作句柄实现通信

读写特性:若管道中没有数据,则read会阻塞

若管道中数据满了,则write会阻塞

所有的管道的读端被关闭,则继续write则会触发异常,导致进程崩溃退出

所有的管道的写端被关闭,则继续read则会读完数据后返回0,不再阻塞

注:管道是半双工通信,在通信时,一旦选定了 方向,应将不使用的那一端关闭。

· 命名管道:本质是 内核中的一块缓冲区,具有标识符,可以被其他进程找到,因此可用于同一主机上的任意进程间通信

命名管道的标识符就是一个可见于文件系统的管道类型文件

多个进程通过打开同一个管道文件,访问同一块内核中的缓冲区实现通信

命令操作:mkfifo filename 创建一个命名管道文件

函数操作:int mkfifo(const char *pathname, mode_t mode);

pathname:文件名称;mode:创建权限

返回值:成功返回0;失败返回-1

·总结:管道的本质:内核空间中的一块缓冲区

原理:多个进程通过访问同一块缓冲区实现数据传输

分类:匿名管道、命名管道

匿名管道:只能用于具有亲缘关系的进程间通信

命名管道:可以用于同一主机上任意进程间通信

特性:①半双工通信--可以选择方向的单向通信

提供字节流传输服务:有序的、可靠的、基于连接的一种流式传输

基于连接:所有读端关闭则write异常;所有写端关闭则read返回0

②自带同步与互斥:

同步:通过同一时间进程对临界资源的唯一访问实现访问操作安全

互斥:通过一些条件判断让进程对临界资源的访问更加合理有序

互斥的体现:对管道进行写入操作的大小不超过PIPE_BUF-4096大小,则保证操作的原子性

同步的体现:管道没有数据则read阻塞,管道数据写满则write阻塞

③生命周期随进程:不人为干预情况下,所有打开管道的进程退出后,管道缓冲区被释放

·共享内存:用于实现进程间的数据共享

本质:一块物理内存

原理:开辟一块物理内存空间,多个进程将同一块映射到自己的虚拟地址空间,通过虚拟地址直接进行访问,进而实现数据共享

特性:最快的进程间通信方式,生命周期随内核

共享内存通过虚拟地址直接访问物理内存,实现数据共享,相对于其他方式需要将数据拷贝到内核,使用时拷贝到用户态,少了两次数据拷贝操作

注意事项:对共享内存的操作需要注意安全问题

操作流程:

①创建或打开共享内存

②将共享内存映射到进程的虚拟地址空间

③通过映射的虚拟地址进行各种内存操作

④解除映射关系

⑤删除共享内存

int shmget(key_t key, size_t size, int shmflg);

key:标识符(多个进程通过相同的标识符打开同一块共享内存)

size:创建时所开辟的空间大小(以内存页为单位)

shmflg:打开方式 + 创建权限--IPC_CREAT|IPC_EXCL|0664

返回值: 成功返回一个非负整数--操作句柄;失败返回-1

void *shmat(int shmid, const void *shmaddr, int shmflg);

shmid:shmget返回的操作句柄

shmaddr:映射地址,通常设置为NULL

shmflg:映射成功后的访问方式;SHM_RDONLY-只读;0-读写

返回值:成功则返回映射后的首地址;失败返回(void *)-1

int shmdt(const void *shmaddr);

shmaddr:映射后的首地址

返回值:成功返回0;失败返回-1

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

shmid:shmget返回的操作句柄

cmd:操作类型--IPC_RMID 标记共享内存为被销毁

buf:对于IPC_RMID,成功返回0,失败发返回-1

·消息队列

本质:内核中的一个优先级队列,多个进程通过访问同一个队列,向队列中添加或者获取节点而实现进程间的数据块传输

特性:自带同步与互斥,生命周期随内核

·信号量

本质:内核中的一个计数器 + pcb等待队列

作用:用于实现进程间的同步与互斥,协调进程对临界资源的访问

P操作:计数器-1,判断若计数小于0则阻塞进程

V操作:计数器+1,唤醒一个阻塞的进程

通过自身的计数器对资源进行计数,通过计数判断进程对资源的获取是否合理,不合理则阻塞。等待产生一个资源之后,唤醒阻塞的进程

同步的实现:通过计数器对资源进行计数,在获取资源之前进行P操作

互斥的实现:计数器为1,表示资源只有一个,进程访问资源之前进行P操作,访问完毕后进行V操作

到此,相信大家对"Linux进程间通信的方式是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

进程 管道 通信 内存 数据 方式 内核 地址 缓冲区 缓冲 资源 阻塞 成功 文件 标识 标识符 空间 多个 本质 特性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库superclass 公共网络安全保护技术 软件开发过程模型分为哪几种 中学生网络安全应该怎么做 安卓软件开发用到语言 软件开发行业税务管理 阿里云服务器开放安全组 中山专业软件开发批发价格 幻塔服务器为什么只能选一种 网络安全技术的问题 远程服务器配置数据库 测试人员对数据库有啥权限 战意亚服服务器推荐 江西南昌dns服务器虚拟主机 数据库连接池的作用与功效 崇明区创新数据库服务销售 网络安全手抄报带鼠标 邦赢网络技术有限公司网址 数据库专升本填空题 如何删除我的世界服务器已安装光影 linux网络技术配套实验教程 汽车远程软件开发公司 那些是5g网络技术 支付安全服务器下载 时代网络技术分类优势 战意亚服服务器推荐 江西南昌dns服务器虚拟主机 网络安全空间学什么待遇如何 进口串口通信服务器报价 代理商商城软件开发
0