进程与线程(7)

news2024/11/27 18:48:07

IPC通信方式:

一、共享内存

         system v :  共享内存 

  1. 是一块,内核预留的空间 
  2. 最高效的通信方式 (避免了用户空间 到 内核空间的数据拷贝)


 

    二、IPC对象操作通用框架:

key值 ==> 申请 ==》读写 ==》关闭 ==》卸载

1.ftok函数

        产生key值

 key_t ftok(const char *pathname, int proj_id);

        (1)功能:将pathname 和 proj_id 转换为 key值 

        (2)参数:pathname:给一个路径名 ;proj_id:工程id       eg: 'A'
        (3)返回值:成功: key值;失败: -1     

key_t key = ftok("/",'A');

	if (key < 0)
	{
		perror("ftok fail");
		return -1;
	}

	printf("key = %d\n",key);
2.shmget函数

        通过key获取ipc对象 (共享内存)

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

        (1)功能:使用唯一键值key向内核提出共享内存使用申请
        (2)参数:key:唯一键值;size: 要申请的共享内存大小;shmflg: 申请的共享内存访问权限,八进制表示(如果是第一个申请,则用IPC_CREAT;如果要检测是否存在,用IPC_EXCL)
        (3)返回值:成功: 返回共享内存id,一般用shmid表示;失败 : -1;

int shmid = shmget(key,1024,IPC_CREAT|0666);

	if (shmid < 0)
	{
		perror("shmget fail");
		return -1;
	}

	printf("shmid = %d\n",shmid);
3.shmat函数

        共享内存 绑定 

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

        (1)功能:将指定shmid对应的共享内存映射到本地内存。

        (2)参数:shmid:要映射的本地内存;shmaddr:本地可用的地址,如果不确定则用NULL,表示由系统自动分配;shmflg:(0 :表示读写;SHM_RDONLY:只读)
        (3)返回值:成功: 返回映射的地址,一般等于shmaddr;失败: (void*)-1        

void *p = shmat(shmid,NULL,0);
    if(p == (void *)-1)
    {
        perror("shmid fail");
        return -1;
    }
    signal(SIGUSR1,handler);
    pid_t *q = (pid_t *)p;
    *q = getpid();
    char *s = (char *)p;
    while(1)
    {
        printf("s = %s\n",s);
        if(strncmp(s,"quit",4) == 0)
        {
            break;
        }
        paus
4.shmdt函数:

        解除绑定(映射)

    int shmdt(const void *shmaddr);

        (1)功能:将本地内存与共享内存断开映射关系。
        (2)参数:shmaddr 要断开的映射地址。
        (3)返回值:成功:  0;失败:  -1;

if(shmdt(p) < 0)
    {
        perror("shmdt fail");
        return -1;
    }
5.shmctl函数

        销毁IPC对象 

 int shmctl(int shmid, int cmd, struct shmid_ds *buf); //ctl = control 

        (1)功能:修改共享内存属性,也可以删除指定的共享内存对象。
        (2)参数:shmid: 要删除的共享内存对象;cmd: IPC_RMID 删除对象的宏;buff:  NULL 表示只删除对象。
        (3)返回值:成功: 0; 失败: -1

 if(shmctl(shmid,IPC_RMID,NULL) < 0)
    {
        perror("shmctl fail");
        return -1;
    }

练习:

二、消息队列

        消息队列是一旦创建,则会一直存在。除非关机,或者自己在程序中做删除,或者通过命令的方式(ipcrm)显式的来删除!消息队列可以实现对不同类型的消息的收发,那么这些类型的消息是放在同一个消息队列中的!接收方可以学着接受哪种类型的消息!

三、信号量集        

        信号灯的出现主要是为了解决多任务程序并发执行时,对资源的访问出现的竞争同步的问题。信号量最初是对资源的一种抽象和模拟,最初的信号量(整型信号量),就是通过一个数值,来表示某种资源的个数,在你这个抽象的基础上,他的发明者Dijkstra(迪杰斯塔拉)为其制定了两个原子性(一次性执行完的,不可被中断的)的操作,P操作(passeren(申请通过)),V操作(vrijgeven释放)来实现对互斥资源的访问,后来处于对(1).多个临界资源的访问,(2)和资源使用数量的限制(在有些情况下,当资源数量低于某一下限值时,便不予分配).信号量的概念得到进一步发展,形成了所谓的”信号灯集”.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2060579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Dash】Dash中@callback() 回调函数的Output() 参数

一、Dash 中的 callback() 在Python中&#xff0c;callback是一个用于注册回调函数的装饰器 Dash 的回调机制允许开发者创建交互式的Web应用&#xff0c;通过回调函数可以实现前端界面与后端逻辑的交互。 二、callback() 的概念、定义和应用场景 概念 callback 是 Dash 框…

视觉表征学习中的世界模型:自监督方法的新篇章

人工智能咨询培训老师叶梓 转载标明出处 计算机视觉中&#xff0c;表征学习是一个核心问题。如何让机器像人类一样理解图像内容&#xff0c;是实现高级视觉任务的关键。传统的自监督学习方法往往依赖于数据的变换来预测其变化&#xff0c;例如遮蔽图像建模&#xff08;Masked …

SpringBoot:将单体项目拆分成微服务项目

&#x1f4a5; 该系列属于【SpringBoot基础】专栏&#xff0c;如您需查看其他SpringBoot相关文章&#xff0c;请您点击左边的连接 目录 一、项目准备 二、拆分商品服务和购物车服务 1. 商品服务 &#xff08;1&#xff09;创建模块 &#xff08;2&#xff09;填写依赖 &a…

数学生物学-1-指数增长与衰退(Exponential Growth and Decay)

我们注意到数学专业的学生往往没有生物学系统的思维&#xff0c;而生物专业的学生则常常对数学感到恐惧。许多生物专业的学生可能一直对科学感兴趣&#xff0c;部分原因是他们认为生物学是一个不需要任何数学技能或背景就可以研究的科学领域。我认为这是不对的思维。 虽然大多…

Fortify相比其他扫描工具的优势在哪里?

最新发布的 Fortify 22.1.0 版本&#xff0c;不仅能高度兼容最新的软件技术&#xff0c;同时继续保持对运营环境常见的应用安全用例的广泛兼容性。经过强化的 Fortify 进一步提升了性能、准确性、可扩展性和易用性。 无论是运行 DevSecOps、开展云计算转型&#xff0c;还是确保…

Mac移动硬盘选什么格式最好 Mac怎么用ntfs移动硬盘

在使用Mac电脑的过程中&#xff0c;很多用户可能有需要扩展存储空间的需求。选择合适的移动硬盘格式对于数据传输的效率和兼容性至关重要。本文将详细介绍Mac移动硬盘选什么格式好&#xff0c;以及Mac怎么用ntfs移动硬盘&#xff0c;帮助用户优化Mac的使用体验。 一、Mac移动硬…

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

仿照ContentLoadingProgressBar 的特点在Android项目中自定义Loading对话框

ContentLoadingProgressBar 是 Android 中的一个控件&#xff0c;继承自 ProgressBar。它在 ProgressBar 的基础上添加了一些特殊功能&#xff0c;主要用于在加载内容时显示进度。它的一些主要特点如下&#xff1a; 自动隐藏和显示&#xff1a;ContentLoadingProgressBar 会在…

引发C++程序内存泄漏的常见原因分析与排查方法总结

目录 1、概述 2、内存泄漏与程序的位数 3、调用哪些接口去动态申请内存&#xff1f; 4、引发内存泄漏的常见原因总结 4.1、通过malloc/new等动态申请的内存&#xff0c;在使用完后&#xff0c;没有调用free/delete去释放&#xff08;也可能是调用了上面讲到的HeapAlloc或V…

计算机专业大四毕业生如何在一天内完成开题报告?一招教你解锁开题报告写作技巧

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

SQL Server数据库 创建表,和表的增删改查

打开SQL Server工具,连接服务器 右击数据库&#xff0c;创建新的数据库 新建表 填写列&#xff0c;我添加了Id,Name,Sex,Age,和class列 右键表刷新一下就有了 我又同时创建了一个Class表 点击新建查询&#xff0c;现在写代码添加数据&#xff0c;也可以操作表来对数据进行添加 …

GEC6818开发板显示BMP格式图片

1、BMP格式图片 bmp格式图片是没有经过任何压缩过的图片,缺点是为文件尺寸比较大,不适合传播;优点是文件必须要解码器可以读出来直接使用。 虽然BMP格式文件内部存储的就是RGB数据,无需任何解码,但毕竟RGB数据是纯数据,没有任何图片尺寸、色深等具体信息,因此我们需要了…

滴滴二季度GTV达963亿元 经调整EBITA盈利13亿元

8月21日&#xff0c;滴滴在其官网发布2024年二季度业绩报告。 二季度&#xff0c;包括中国出行和国际业务在内的核心平台交易量为38.75亿单&#xff0c;较去年同期增长17.4%。其中&#xff0c;中国出行总单量为30.04亿单&#xff0c;较去年同期增长12.3%&#xff1b;国际业务总…

python爬虫--pyquery解析库整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理python的爬虫解析库pyquery的语法 简洁快速的整理&#xff0c;建议有前端基础的人看 pyquery解析原理 pyquery的原理就是拿到网站的前端源码后&#xff0c;我们根据我们需求信息所在的标签进行筛选。 选…

C语言第15篇

1.阅读下面的程序 #include<stdio.h> void main() { int i,j; i010; j9; printf("%d,%d",i-j,ij); } 则程序的运行结果是________. A) 1,19 B) -1,19 C) 1,17 D) -1,17 提示&#xff1a;八进制 2.以下程序段__________. x-1; do { xx*…

Aria2安装和使用-Mac版

起因是需要网盘下载&#xff0c;无奈限速很烦&#xff0c;查找很多方案后&#xff0c;最终决定使用Aria2 Tampermonkey。 其中Aria2是一款开源轻量的下载软件&#xff0c;简单来说就是可以通过URL直接下载。 Tampermonkey则是一款插件&#xff0c;我这里是.crx结尾的谷歌插件…

WPF调用CEF插件运行时启动CefSharp.BrowserSubprocess.exe三个进程

cefsharp.browsersubprocess.exe 是CefSharp&#xff08;一个基于Chromium的开源浏览器控件&#xff09;的一部分。这个可执行文件通常在以下情况下启动&#xff1a; 渲染进程&#xff1a;CefSharp使用多进程架构&#xff0c;类似于Chrome浏览器。cefsharp.browsersubprocess.e…

【网络】HTTPS——HTTP的安全版本

1.HTTP的问题 1、使用明文通信 HTTP协议不具备给通讯内容加密的功能&#xff0c;所有使用HTTP协议通信的请求和响应的内容无法进行加密,都是使用明文发送。由于HTTP属于TCP/IP协议族的协议&#xff0c;按照TCP/IP协议族的通讯机制&#xff0c;HTTP在整个通讯线路上都存在被窃听…

商务场合的白酒艺术,助你轻松搭建人脉

在繁忙的商务世界中&#xff0c;每一次会面都可能是开启新机遇的钥匙。而在这些重要的场合中&#xff0c;白酒不仅仅是一种饮品&#xff0c;更是一种文化的载体、一种沟通的桥梁。今天&#xff0c;就让我们一起探讨如何在商务场合中&#xff0c;通过豪迈白酒&#xff08;HOMANL…

深度好文:从《黑神话:悟空》看未来游戏趋势:高互动性、个性化与全球化

引言 在数字时代的浪潮中&#xff0c;游戏产业以其独特的魅力和无限的可能性&#xff0c;成为了全球娱乐文化的重要组成部分。随着科技的飞速发展&#xff0c;特别是高性能计算和人工智能技术的突破&#xff0c;游戏的世界变得越来越真实、细腻且富有深度。而在这股技术洪流中…