c共享内存

共享内存

  • 共享内存实现
    • 使用共享内存步骤:
    • 示例:

共享内存实现

共享内存实质是将内核中的一块内存映射到进程中的内存,操作本地内存就相当于操作共享内存。

使用共享内存步骤:

  1. 创建共享内存
#include <sys/ipc.h>
#include <sys/shm.h>
/*
创建共享内存:
int shmget(key_t key, size_t size, int shmflg);
函数描述:创建或获得共享内存id	
一般用法:1、如果共享内存已经存在:key_t key = 0x1234;int shmId = shmget(key, 0, 0);2、如果共享内存不存在:int shmId = shmget(key, 100, IPC_CREAT|IPC_EXCL|0755);3、如果不知道到底存不存在:int shmId = shmget(key, 100, IPC_CREAT|0755);
*/
  1. 关联共享内存
#include <sys/types.h>
#include <sys/shm.h>/*
连接共享内存:
void *shmat(int shmid, const void *shmaddr, int shmflg);
函数描述:连接共享内存
参数:shmid: shmget函数返回的共享内存的id值shmaddr: 传NULL,表示让内核分配地址shmflg: SHM_RDONLY:只能对共享内存进行读操作0:可读可写
返回值:成功:返回关联共享内存的地址失败:(void*)(-1)
*/
  1. 使用共享内存–读写共享内存
  2. 断开与共享内存的关联
#include <sys/types.h>
#include <sys/shm.h>
/*
int shmdt(const void *shmaddr);
参数:shmaddr: shmat返回的内存地址
返回值:成功:返回0失败:返回-1,并设置errno*/
  1. 删除共享内存
#include <sys/ipc.h>
#include <sys/shm.h>
/*
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
函数描述:设置或删除共享内存
参数:shmid:shmget函数返回的共享内存的id值cmd:IPC_STAT:获得共享内存的状态信息IPC_SET:设置共享内存信息IPC_RMID:删除共享内存buf:若cmd为IPC_RMID, 则buf为NULL
*/

示例:

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>int main()
{// 创建共享内存 int shmget(key_t key, size_t size, int shmflg);key_t key = 0x12345678;int nShmId = shmget(key, 1024, IPC_CREAT | 0664);if (0 > nShmId){perror("shmget error");return -1;}// 关联共享内存 void *shmat(int shmid, const void *shmaddr, int shmflg);void *pShmAddr = shmat(nShmId, NULL, 0);if ((void *)(-1) == pShmAddr){perror("shmat error");return -1;}// 读写共享内存memcpy(pShmAddr, "hello world", sizeof("hello world"));printf("shmId: %d, shmAddr: %p, content: %s\n", nShmId, pShmAddr, pShmAddr);puts("按任意键:\n");getchar();// 断开共享内存关联 int shmdt(const void *shmaddr);if (-1 == shmdt(pShmAddr)){perror("shmdt error");return -1;}puts("按任意键:\n");getchar();// 删除共享内存 int shmctl(int shmid, int cmd, struct shmid_ds *buf);if (-1 == shmctl(nShmId, IPC_RMID, NULL)){perror("shmctl error");return -1;}return 0;
}

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

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

相关文章

用百度云怎么重装电脑系统

用百度云怎么重装电脑系统 随着云计算技术的飞速发展&#xff0c;百度云成为了人们日常生活中不可或缺的一部分。百度云不仅提供了强大的文件存储和传输功能&#xff0c;还可以帮助人们轻松地重装电脑系统。下面就让我们来介绍一下如何用百度云重装电脑系统。 步骤一&#xf…

mysql配置项整理

二、&#xff1a;mysql服务器参数 general 基础配置 datadir/var/lib/mysql #数据文件存放的目录 socket/var/lib/mysql/mysql.sock #mysql.socket表示server和client在同一台服务器&#xff0c;并且使用localhost进行连接&#xff0c;就会使用socket进行连接 pid_file/v…

NUC980webServer开发

目录 1.RTL8189FTV驱动移植 2.wifi配置工具hostapd移植 1.openssl-1.0.2r交叉编译 2.libnl-3.2.25.tar.gz交叉编译 3.hostapd-2.9.tar.gz交叉编译 4.移植相关工具到开发板 1.RTL8189FTV驱动移植 1. 把驱动文件源码放在linux源码的drivers/net/wireless/realtek/rtlwifi/目录…

大语言模型推理与部署工具介绍

推理与部署 本项目中的相关模型主要支持以下量化、推理和部署方式&#xff0c;具体内容请参考对应教程。 工具特点CPUGPU量化GUIAPIvLLM16K‡教程llama.cpp丰富的量化选项和高效本地推理✅✅✅❌✅❌✅link&#x1f917;Transformers原生transformers推理接口✅✅✅✅❌✅✅l…

一生一芯13——linux设置环境变量

参考自https://baijiahao.baidu.com/s?id1753516015142083750&wfrspider&forpc 本机使用ubuntu22.04 目录 1. 读取环境变量1. 读取特定环境变量2. 读取所有环境变量 2. 设置环境变量1. 对当前用户有效2. root设置 1. 读取环境变量 1. 读取特定环境变量 在命令行中输…

【内存管理】C与C++的内存管理异同点

C/C程序内存区域划分 栈又称堆栈&#xff1a;存放非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。内存映射段&#xff1a;高效的I/O映射方式&#xff0c;用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存&#xff0c;做进程间通信。堆&…

LeetCode 1113.报告的记录

数据准备 Create table If Not Exists Actions (user_id int, post_id int, action_date date, action ENUM(view, like, reaction, comment, report, share), extra varchar(10)); Truncate table Actions; insert into Actions (user_id, post_id, action_date, action, ext…

Mybatis传递实体对象只能直接获取,不能使用对象.属性方式获取

mybatis的自动识别参数功能很强大&#xff0c;pojo实体类可以直接写进mapper接口里面&#xff0c;不需要在mapper.xml文件中添加paramType,但是加了可以提高mybatis的效率 不加Param注解&#xff0c;取值的时候直接写属性 //这里是单参数&#xff0c;可以不加param&#xff01…

软件测试/测试开发丨Web自动化 测试用例流程设计

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27173 一、测试用例通用结构回顾 1.1、现有测试用例存在的问题 可维护性差可读性差稳定性差 1.2、用例结构设计 测试用例的编排测试用例的项目结构 1…

代码随想录Day_56打卡

①、两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 事例&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea&…

android NDK 开发包,网盘下载,不限速

记录下ndk 开发包的地址&#xff0c;分享给大家。 另外有Android studio的下载包&#xff0c; 在另一篇文章 链接&#xff1a;http://t.csdn.cn/JSr9x Android Studio.exe 下载 2023 最新更新&#xff0c;网盘下载_hsj-obj的博客-CSDN博客 主要是19-25&#xff0c;其他的没有…

CMakeList.txt

CMakeList.txt的写法 前言一个最近写好的CMakeList.txt对上边CMakeList.txt的说明修改 前言 复习一下CMakeList.txt的写法,以下面的一个CMakeList.txt为例 一个最近写好的CMakeList.txt cmake_minimum_required(VERSION 3.17)project(QtVTKProject)# INCLUSION OF Qt # set(…

uni-app 封装api请求

目录 1&#xff0c;封装API请求步骤2&#xff0c;uni-app封装api请求改进 1&#xff0c;封装API请求步骤 在uni-app中封装API请求可以按照以下步骤进行&#xff1a; 创建一个utils文件夹&#xff0c;并在其中创建一个api.js文件&#xff0c;用于存放API请求相关的代码。 在ap…

python开发基础篇1——后端操作K8s API方式

文章目录 一、基本了解1.1 操作k8s API1.2 基本使用 二、数据表格展示K8s常见资源2.1 Namespace2.2 Node2.3 PV2.4 Deployment2.5 DaemonSet2.6 StatefulSet2.7 Pod2.8 Service2.9 Ingress2.10 PVC2.11 ConfigMap2.12 Secret2.13 优化 一、基本了解 操作K8s资源api方式&#xf…

算法通关村-----快速排序的应用

数组中的第K个最大元素 问题描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。详见leetcode215 问题分析 之前我们已经使用堆排序/堆查找的…

高等数学刷题

两个公式本质都是相同的 Π/2 1^∞类型

【解决】mysqladmin flush-hosts

问题 mysql出现 mysqladmin flush-hosts&#xff0c;是因为其他客户机连接错误次数过多时&#xff0c;mysql会禁止客户机连接。 解决方法 1、进入服务器数据库&#xff0c;打开数据库命令行界面输入 flush hosts; 此时便可连接 2、可以.修改mysql配置文件&#xff0c;在[…

转 股票触发指定价格发送到 企业微信

[Python源码]股票价格监听并推送-代码狗 import aiohttp,asyncio,json,time,re,os,datetimeclass StockListen:def __init__(self):#定义需要监听的股票代码列表self.stock_list [1.600050,1.601988,1.601288,1.601939]#定义预期价格列表self.expect_price [6.6,3.0,2.7,5]#…

用户促活留存新方式——在APP中嵌入小游戏

随着APP同类产品的不断出现&#xff0c;APP开发者们面临着激烈的竞争&#xff0c;很多APP下载后被新的APP取代&#xff0c;获客成本越来越高。同时开发者还会面临用户粘性差、忠诚度低、用完即走、留存困难&#xff0c;商业化价值被大大缩减。 在APP中植入小游戏来提高用户活跃…

指针的应用与用法

指针的应用场景 从刚才的需求看&#xff0c;指针似乎并不是刚需啊&#xff0c;为什么一定要用指针呢&#xff0c;那么难理解&#xff0c;这是因为有些应用场景非他不可&#xff1a; 1.访问单片机的寄存器&#xff1b; 2.函数调用时内存共享&#xff1b; 3.常用数据结构链表&…