linux共享内存总结

news2024/9/19 10:44:38

共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成

头文件:

 #include <sys/ipc..h>

 #include<sys/shm.h>


 // 创建或获取一个共享内存: 成功返回共享内存ID,失败返回-1
 int shmget (key_t key, size_t_size, int flag);


 // 连接共享内存到当前进程的地址空间: 成功返回指向共享内存的指针,失败返回-1
 void *shmat (int shm_id, const void *addr, int flag);


 // 断开与共享内存的连接: 成功返回0,失败返回-1
 int shmdt (void *addr):


 // 控制共享内存的相关信息: 成功返回0,失败返回-1

 int shmctl (int shm_id, int cmd, struct shmid_ds *buf) 


当用shmget函数创建一段共享内存时,必须指定其 size;而如果引用一个已存在的共享内存,则将 size 指定为0
当一段共享内存被创建以后,它并不能被任何进程访问。必须使用shmat函数连接该共享内存到当前进程的地址空间,连接成功后把共享内存区对象映射到调用进程的地址空间,随后可像本地空间一样访问。

shmdt函数是用来断开shmat建立的连接的。注意,这并不是从系统中删除该共享内存,只是当前进程不能再访问该共享内存而已

shmct函数可以对共享内存执行多种操作,根据参数 cmd 执行相应的操作。常用的是IPC_RMID (从系统中删除该共享内存)。

封装共享内存读:

#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

//int shmget(key_t key, size_t size, int shmflg);
int main()
{
    
    int shmid;
    char *shmaddr;

    
    key_t key;
    key = ftok(".",1);
    
    shmid = shmget(key,1024*4,0);
    if(shmid == -1){
        printf("shmget noOk\n");
        exit(-1);
    }
    shmaddr = shmat(shmid,0,0);

    printf("shmat ok\n");
    printf("data: %s\n:",shmaddr);

    shmdt(shmaddr);

    printf("quit\n");
    
    return 0;
}

封装共享内存写:

#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

//int shmget(key_t key, size_t size, int shmflg);
int main()
{
    
    int shmid;
    char *shmaddr;

    
    key_t key;
    key = ftok(".",1);
    
    shmid = shmget(key,1024*4,IPC_CREAT|0666);
    if(shmid == -1){
        printf("shmget noOk\n");
        exit(-1);
    }
    shmaddr = shmat(shmid,0,0);

    printf("shmat ok\n");
    strcpy(shmaddr,"ljxzgl");

    sleep(5);
    shmdt(shmaddr);
    shmctl(shmid, IPC_RMID, 0);

    printf("quit\n");
    
    return 0;:
}

编译结果:

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

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

相关文章

Java修饰符

4 修饰符(static关键字) 4.1 权限修饰符 4.2 状态修饰符 final(最终态)static(静态)4.2.1 final的特点 final 关键字是最终的意思,可以修饰成员变量,成员方法,类final修饰的特点: 1.修饰方法:表示该方法是最终方法,不能被重写2.修饰变量:表示该变量是常量,不能被…

深入了解Nginx:高性能的开源Web服务器与反向代理

一、Nginx是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;也可以作为负载均衡器和HTTP缓存服务器使用。它采用事件驱动、异步非阻塞的处理方式&#xff0c;能够处理大量并发连接和高流量负载&#xff…

推荐试试这个简单好用的手机技巧

技巧一&#xff1a;一键锁屏 除了按住手机电源键进行锁屏外&#xff0c;还有其他一些快捷方法可以实现锁屏操作。 对于苹果手机用户&#xff0c;可以按照以下步骤进行设置&#xff1a; 1.打开手机的设置应用&#xff0c;通常可以在主屏幕或应用列表中找到该图标。 2.在设置…

chatgpt赋能python:Pythonunittest跳过用例:使用unittest中跳过测试用例的方法

Python unittest 跳过用例&#xff1a;使用unittest中跳过测试用例的方法 如果你正在开发一个Python项目&#xff0c;你可能已经使用了Python的unittest模块来编写并运行测试用例。在编写测试用例时&#xff0c;有些情况下你可能不想运行某些测试用例&#xff0c;这时就需要使…

Window10安装SQL Server

一、安装SQL Server 1、进入官网根据个人所需下载对应版本即可&#xff0c;本文是基于SQL Server 2022 Express的安装过程 SQL Server 下载 | Microsofthttps://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2、下载完毕&#xff0c;运行安装指引程序 如若不熟悉…

LC-3机器码编程实验 求成绩等级

一、实验目的 分析和理解指定的需解决问题。利用LC-3的汇编代码设计实现相关程序。通过LC-3仿真器调试和运行相关程序并得到正确的结果。 二、实验内容 对学生的成绩使用数组进行排序。 背景&#xff1a;一位老师需要你帮忙决定学生的成绩&#xff0c;她想要根据学生分数在…

【分立元件】MOSFET如何用于同步整流

在电力电子中我们会使用二极管做开关,当二极管导时,相当于开关闭合,当二极管截止时,相当于开关断开。但是二极管在导通时的管压降在低压电源电路中是一个损耗来源,所以一般我们首选使用的是肖特基二极管,因为肖特基二极管的管压降比较低。 如下所示为非同步BUCK电源拓朴…

小黑坐等政审,论文成果毕业事项基本提交,着手眼睛手术明天准备体检然后出发独自夜爬华山的leetcode之旅:81. 搜索旋转排序数组 II

去除相等的二分法 class Solution:def search(self, nums: List[int], target: int) -> bool:# 数组长度n len(nums)# 双指针left 0right n-1# 二分法迭代while left < right:mid (left right) // 2if nums[mid] target:return Trueif nums[left] nums[mid]:left…

原来CSS的登录界面可以变得这么好看

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&#xff1a;几何小超 &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目…

Python之将日志写入到文件(二十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【MySQL 数据库】4、MySQL 事务学习

目录 一、事务简介二、事务相关 SQL 语句(1) 事务提交方式(2) 开启、提交、回滚事务 三、事务的四大特性四、并发事务问题五、事务的隔离级别 一、事务简介 二、事务相关 SQL 语句 (1) 事务提交方式 # 查看当前数据库事务的提交方式 # 1: 自动提交 # 0: 手动提交 select autoc…

解决:在单项目组件里面引入 base.scss/ base.less 等的外部文件不成功的问题

1、问题展示&#xff1a; 其一、问题描述&#xff1a; 在单文件组件里面使用封装在 base.scss 或 base.less 里面的样式用法一直不成功&#xff1b; 其二、代码&#xff1a; // 虽然已经标明了用的是 scss 的语法&#xff0c;但是页面调用 .scss 里的 style 样式还是不成功&a…

【Android学习】Android studio环境搭建-解决下载gradle慢加载mainfest.xml慢的问题

转载&#xff1a;https://blog.csdn.net/qq_31881469/article/details/78646406/ 目录 1、解决网络连接问题 &#xff08;1&#xff09;问题描述 &#xff08;2&#xff09;方法步骤 2、解决内存吃紧问题 &#xff08;1&#xff09;问题描述 &#xff08;2&#xff…

chatgpt赋能python:Python的SEO优化

Python的SEO优化 介绍 Python是一种高级编程语言&#xff0c;旨在提高开发人员的生产力和代码可读性。在过去的10年中&#xff0c;Python已迅速成为最受欢迎的编程语言之一&#xff0c;具有广泛的应用领域&#xff0c;包括数据科学、机器学习、人工智能、网络编程和Web开发。…

chatgpt赋能python:Python集合的差集

Python集合的差集 Python是一门强大的动态语言&#xff0c;不仅应用于广泛的领域&#xff0c;而且它还拥有非常丰富的数据结构。Python中的集合(set)是一种无序、不重复元素的结构&#xff0c;常用于去重&#xff0c;检查成员等操作。 在Python中&#xff0c;可以使用"-…

Java面试知识点(全)-分布式算法- ZAB算法

Java面试知识点(全) 导航&#xff1a; https://nanxiang.blog.csdn.net/article/details/130640392 注&#xff1a;随时更新 研究zookeeper时&#xff0c;必须要了解zk的选举和集群间个副本间的数据一致性。 什么是 ZAB 协议&#xff1f; ZAB 协议介绍 ZAB 协议全称&#xf…

docker安装mysql8.0.33

1 从docker仓库中拉去mysql 8.0 docker pull mysql:8.0如果使用 docker pull mysql 默认拉取的是最新版本的mysql 上面我拉去的是8.0的版本&#xff0c;最后拉取过来的是8.0.33 如果有想要指定的版本&#xff0c;可以直接写指定版本&#xff0c;如&#xff1a; docker pull my…

Python速查表;腾讯大佬的AIGC设计应用汇总;这个世界需要10亿开发者;67个最常用AI工具清单 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『一份必收藏的 Python 3 速查表』可运行代码中文注释 随着AIGC浪潮的兴起&#xff0c;越来越多小伙伴尝试着使用 GPT 类工具开发小程…

如何通过提高技能来克服 IT 技能差距

有时招聘很容易&#xff0c;你发布了职位描述&#xff0c;然后突然被热切的、合格的候选人淹没了。 特别是对于技术职位&#xff0c;招聘前景从未如此黯淡。谈论信息技术 (IT) 人才缺口是不可避免的&#xff0c;并且有充分的理由&#xff1a;根据研究&#xff0c;73% 的企业领…

chatgpt赋能python:Python%2:优化你的代码

Python %2&#xff1a;优化你的代码 Python是一门强大的编程语言&#xff0c;被广泛应用于数据分析、机器学习、Web开发等领域。在Python的语法中&#xff0c;有一个运算符%用于格式化字符串&#xff0c;在本篇文章中&#xff0c;我们将聚焦于%2的应用&#xff0c;以帮助读者优…