当前位置: 首页 > news >正文

linux下的进程间和线程间通信

进程间的通信

这个有5种啊,他们是1.管道通信,2.信号signal通信,3.消息队列,4.共享内存,5.信号量

管道

标准流管道

FILE类型
popen(要运行的linux指令,“r”或“w”)
会运行里面的linux指令
pclose(管道文件的指针);
关闭管道文件。

非标准流管道

文件类型为p都是管道文件
类似管道,一端出水,一端进水,管道文件有两个端,一个读端,类似出水,写端类似进水。
所以有两个文件描述符,他们储存在一个有两个整形元素的数组里
如fds【2】,调用pipe(fds),就会创建管道了。
fds【0】是读端
fds【1】是写端

无名管道

只能在父子或兄弟进程才能使用
使用pipe(fds)创建了管道文件,就可以read(fds[0],buf,sizeof(buf)),类似这样读写内容了。进行进程间的通信了。
注意下这个
在这里插入图片描述

命名管道,也就是FIFO

非父子兄弟进程也可以使用,
mkfifo(命名管道文件的路径名,文件访问的权限)
创建一个命名管道文件
unlink(命名管道文件的路径名)
删除一个命名管道文件
在这里插入图片描述
这个是命名管道的读写规则
命名管道文件的打开关闭,也是open,和close
读写函数也是read,和write。

内存映射

就是把内容映射到某一个内存中,然后直接对其进行读写,加快速度。
mmap(内容要映射到的内存地址,文件的多少要映射,port对映射区域的保护方式,flag影响映射区域的特性,要映射的文件,文件从开头之后的哪里进行映射)
建立映射,其中
port
在这里插入图片描述
flags
在这里插入图片描述
msync(mmap的返回指针,多大,flag与上面一样)
对内存区域的修改同步到文件。
munmap(mmap的返回指针,多大)
取消映射。
注意:要保证映射到内存的文件不能为空

共享内存

呃,这个与映射差不多,但是不一样,这个主要是 多进程的通信。
就是开辟一个内存空间,放入要共享的数据,要访问的数据的进程,会映射到这个空间。
ftok(可访问文件的路径名,一个字符)
两者组合成一个ftok的返回值key,我们要用key来访问共享内存。
shmget(key,共享内存的大小,shmflg)
在这里插入图片描述
这个用来创建或打开共享内存,打开成功返回一个唯一的标识号。
shmat(shmget返回的唯一标识号,共享内存的地址,位标识)
映射到地址,第二个参数可为NULL,使系统自己分配吗,第三个参数为0即可。映射成功后,该函数返回共享内存的首地址。
shmdt(shmat的返回值)
用来分离共享内存和进程
shmctl(shmget返回的唯一标识符,cmd操作方式,buf’共享内存的信息结构体数据)
第二个和第三个参数参数
在这里插入图片描述

消息队列

msgget(ftok函数创建的key,msgflg)
创建消息队列。
msgsnd(msgget的返回值,消息结构体,消息体的大小,msflg)
在这里插入图片描述
发送消息
msgrcv(msgget的返回值,消息结构体,消息体的大小,msgtyp,msflg在这里插入图片描述
接受消息
这个是结构体
在这里插入图片描述
我们往里面输入和输出信息。
msgctl(msget返回的消息队列标识符,IPC_RMID,NULL)
删除消息队列,msgctl是消息队列控制函数。

信号量

在这里插入图片描述
了解一下即可,我们进程用的是system V信号量,信号量为0表示不能使用,为1表示可以使用
semget(ftok的返回值key,要使用的信号量数目,flag)
创建一个信号集或者访问一个信号集,成功就返回一个信号集标识符,这个flag如下
在这里插入图片描述semop(semget返回的标识符,指向结构体数组的指针,结构数值打大小 )
在这里插入图片描述
在这里插入图片描述
这个函数用来改变信号量的状态。
semctl(semid返回的值,要操作的信号量的编号,cmd操作, 一个union类型的变量)
控制信号量的信息,下面是其的一些参数
在这里插入图片描述
简单了解一下。

线程的通信

条件变量

使用条件变量时,线程一定要上了互斥锁
条件变量创建的有静态和动态,我们了解动态即可
我们使用时要先定义条件变量的结构
这样的:pthread_cond_t 变量名
pthread_cond_init(条件变量的结构,NULL)
创建了一个条件变量。
pthread_cond_destroy(条件变量的结构);
注销一个条件变量。
pthread_cond_wait(条件变量的结构,对应的互斥锁结构)
无条件等待函数,直到激活
pthread_cond_timedwait(条件变量的结构,对应的互斥锁结构,时间)
一直等待函数,时间到了就会解除。
在这里插入图片描述
cond就是条件变量结构。

信号灯

信号灯值大于0,说明可以使用,小于等于0时,说明不可以使用
用来说资源可不可用
先定义一个信号灯标识符
sem_t 变量名
sem_init(信号灯标识符,pshared,value)
在这里插入图片描述
在这里插入图片描述
这个创建信号灯的函数
sem_destroy(信号灯的标识符)
这个用来注销信号灯
sem_post(信号灯的标识符)
点灯操作,也就是加一变成了可以使用。
sem_wait(信号灯的标识符)
灭灯操作,也就是减一变成了不可以使用。
sem_getvalue(信号灯的标识符,信息存放的地址指针)
获取信号灯的值。

http://www.dtcms.com/a/434734.html

相关文章:

  • 网站小图片素材商务网站大全
  • Java 集合 “Map(1)”面试清单(含超通俗生活案例与深度理解)
  • 哔哩哔哩国际版分享 | 白色版 ,蓝色概念版
  • 《P2758 编辑距离》
  • unserialize反序列化漏洞
  • 美工网站设计收费网站中的动态统计图如何做
  • LabVIEW谐波失真分析
  • 秦皇岛市网站制作公司民宿可以在哪些网站做推广
  • 【C++】异常介绍:高级应用与性能优化
  • 大气的网站首页重庆网站建设公司的网站
  • 独立开发者日常:Java大模型流式输出教程
  • 汽车信息安全基石:SHE(安全硬件扩展)深度解析
  • 2025年大模型服务性能深度解析:从清华评测报告看蓝耘元生代MaaS平台的综合实力
  • 网站是哪个公司做的WordPress的网外无法访问
  • 从0死磕全栈之Next.js 流式渲染(Streaming)实战:实现渐进式加载页面,提升用户体验
  • 自己如何创建网站深圳 网站制作
  • 【双指针专题】之复写零
  • 英语学习-Saints039
  • 网站制作费用入什么科目淘宝客优惠券网站建设教程视频
  • CSS field-sizing 让表单「活」起来
  • 【Flutter】抽象类的运用(abstract与implements的实践)
  • 上海建设网站便宜的网站服务器是什么意思
  • 11.UE-游戏逆向-内存中的FUObjectArray(深入理解内存数据)
  • AI智能体在研究分析中的仿真应用:利他主义的悖论——是道德的顶峰,还是精致的利己?
  • SQL语句——高级字符串函数 / 正则表达式 / 子句
  • 西宁网站建设君博首选建设公司的网站首页
  • 【MySQL】数据库事务深度解析:从四大特性到隔离级别的实现逻辑
  • 2021 年真题配套词汇单词笔记(考研真相)
  • 儿童携带背包专利拆解:活动腿弹簧式伸缩卡扣与三模式(背包 / 座椅 / 安全椅)切换机制
  • 一般做一个网站专题页多少钱多商户商城源码下载