共享内存 windows和linux

news2024/9/28 15:19:01

服务端,即写入端


#include <iostream>
#include <string.h>
#define BUF_SIZE 1024
#ifdef _WIN32
#include <windows.h>
#define SHARENAME L"shareMemory"
HANDLE g_MapFIle;
LPVOID g_baseBuffer;
#else
#define SHARENAME "shareMemory"
#include <sys/shm.h>
#include <sys/time.h>
#include <unistd.h>
int g_shmid = -1;
char* g_baseBuffer = NULL;
#endif

void CloseShareMemory()
{
#ifdef _WIN32
	if (g_baseBuffer) {
		FlushViewOfFile(g_baseBuffer, BUF_SIZE);
		UnmapViewOfFile(g_baseBuffer);
		g_baseBuffer = NULL;
	}
	if (g_MapFIle) {
		CloseHandle(g_MapFIle);
		g_MapFIle = NULL;
	}
#else
	shmdt(g_baseBuffer);
	shmctl(g_shmid, IPC_RMID, 0);//删除
#endif
}

bool CreateShareMemory()
{
#ifdef _WIN32
	if (g_MapFIle)
		CloseShareMemory();
	g_MapFIle = CreateFileMapping(
		INVALID_HANDLE_VALUE,	//物理文件句柄
		NULL,					//默认安全级别
		PAGE_READWRITE,			//可读可写
		0,						//高位文件大小
		BUF_SIZE,				//地位文件大小
		SHARENAME				//共享内存名称
	);
	if (g_MapFIle) {
		//映射缓存区视图,得到指向共享内存指针
		g_baseBuffer = MapViewOfFile(
			g_MapFIle,				//共享内存句柄
			FILE_MAP_ALL_ACCESS,	//可读可写许可
			0,
			0,
			BUF_SIZE
		);
		memset(g_baseBuffer, 0, BUF_SIZE);//初始化 置 0 
		return true;
	}
#else
	key_t key = ftok(SHARENAME, 0);
	g_shmid = shmget(key, BUF_SIZE, IPC_CREAT | 0666);
	if (g_shmid != -1) {
		g_baseBuffer = (char*)shmat(g_shmid, 0, 0);
		return true;
	}
#endif
	return false;
}

int main()
{
	//创建
	if (!CreateShareMemory()) {
		std::cout << "CreateShareMemory error!\n";
		return -1;
	}
	//写入数据
	char ch[1024];
	while (1) {
		std::cout << "写入数据或输入exit退出:" << std::endl;
		std::cin >> ch;
		if (0 == strcmp(ch, "exit"))
			break;
		memcpy(g_baseBuffer, ch, 1024);
	}
	//断开 关闭
	CloseShareMemory();

	return 0;
}

客户端,即读取端


#include <iostream>
#include <string.h>
#define BUF_SIZE 1024
#ifdef _WIN32
#include <windows.h>
#define SHARENAME L"shareMemory"
HANDLE g_MapFIle;
LPVOID g_baseBuffer;
#else
#define SHARENAME "shareMemory"
#include <sys/shm.h>
#include <sys/time.h>
#include <unistd.h>
int g_shmid = -1;
char* g_baseBuffer = NULL;
#endif

void CloseShareMemory()
{
#ifdef _WIN32
	if (g_baseBuffer) {
		FlushViewOfFile(g_baseBuffer, BUF_SIZE);
		UnmapViewOfFile(g_baseBuffer);
		g_baseBuffer = NULL;
	}
	if (g_MapFIle) {
		CloseHandle(g_MapFIle);
		g_MapFIle = NULL;
	}
#else
	shmdt(g_baseBuffer);
	//shmctl(g_shmid, IPC_RMID, 0);//删除
#endif
}

bool OpenShareMemory()
{
#ifdef _WIN32
	if (g_baseBuffer)
		CloseShareMemory();
	g_MapFIle = OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, SHARENAME);
	if (g_MapFIle) {
		g_baseBuffer = MapViewOfFile(g_MapFIle, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
		return true;
	}
#else
	key_t key = ftok(SHARENAME, 0);
	g_shmid = shmget(key, BUF_SIZE, IPC_CREAT | 0666);
	if (g_shmid != -1) {
		g_baseBuffer = (char*)shmat(g_shmid, 0, 0);
		return true;
	}
#endif
	return false;
}

int main()
{
	while (1) {
		//打开
		if (!OpenShareMemory()) {
			std::cout << "CreateShareMemory error!\n";
			return -1;
		}
		//读取
		char str[1024];
		memcpy(str, g_baseBuffer, 1024);
		memset(g_baseBuffer, 0, BUF_SIZE);
		if(str[0] != '\0')
			std::cout << "read  value:" << str << std::endl;

		//断开 关闭
		CloseShareMemory();
#ifdef _WIN32
		Sleep(100);
#else

#endif
	}

	return 0;
}

windows演示图
在这里插入图片描述
linux 演示图
在这里插入图片描述

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

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

相关文章

基于秃鹰算法优化的BP神经网络(预测应用) - 附代码

基于秃鹰算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于秃鹰算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.秃鹰优化BP神经网络2.1 BP神经网络参数设置2.2 秃鹰算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

双指针算法实例4(盛最多水的容器)

题目&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不…

基于STM32的天然气煤气检测报警仿真设计(仿真+程序+讲解)

基于STM32的天然气煤气检测报警仿真设计 演示视频1.主要功能2.仿真3. 程序4. 资料清单&下载链接 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;C0081 演示视频 基于STM32的天然气煤气可燃气体检测报警仿真设计 1.主要…

python: pywin32 + cef 模仿 mdict 界面

pip install pywin32 ; pip install cefpython3 cefpython3-66.1-py2.py3-none-win_amd64.whl (69.0 MB) Successfully installed cefpython3-66.1 cd \Python37\Lib\site-packages\cefpython3\examples copy pywin32.py win_cef.py 用的图片在 \Python37\Lib\site-packages…

R语言如果列表中有列表,且每个子列表有一个向量:如何转变为仅仅一个列表里面含有向量

引言 有些时候&#xff0c;比如批量读取表格中的某一列的时候&#xff0c;最终你会得到列表里面装列表&#xff0c;且每个列表里面只有一个向量的情况。我们的目标是不要中间这一层列表&#xff0c;而是直接变成列表-向量这种简单的结构&#xff0c;如何完成呢。我觉得有很多方…

深度解析:Stable Diffusion中negative prompt是如何作用的?

Diffusion Models专栏文章汇总:入门与实战 前言:stable diffusion推理的时候可以用negative prompt(负面提示词)去除我们不想出现的元素,这种方法的背后原理是什么?如何用代码实现呢?这篇博客就深入探讨这个问题。 目录 从分类器引导技术开始说起

参考测试信号:吉布斯效应

吉布斯效应是一种信号处理中常见的现象&#xff0c;特别在信号的突变或跃变时会显现出来。它在信号的瞬时过渡中可能引起频谱中的振铃或震荡&#xff0c;从而导致频谱图中出现不期望的高频成分。这种现象主要发生在信号经过截断或窗口函数等非平滑操作时&#xff0c;例如信号的…

TouchGFX之移植

在前面篇幅的基础上移植TouchGFX 1.配置FreeRTOS 2.使用touchgfx需要打开CRC 3.配置TouchGFX 4.生成代码&#xff0c;工程目录下多了TouchGFX文件夹 5.打开TouchGFX Designer工程 6.放置box控件&#xff0c;将颜色设置为红色 7.运行模拟器&#xff0c;生成代码 8.打开keil工程&…

GPU版本pytorch(Cuda12.1)安装教程

我们通过Pytorch官网安装torch的时候&#xff0c;会发现常常由于网速问题安装不成功&#xff0c;下面提供一种简单的方法可以成功安装Cuda12.1&#xff0c;亲测有效。 目录 一、常规方法 二、有效方法 2.1 创建并激活虚拟环境 2.2 添加清华源 2.3 安装torch 一、常规方法…

adb使用总结

adb连接到模拟器 adb devices 打开模拟器&#xff0c;找到设置。 多次点击版本号&#xff0c;切换到开发者模式 搜索进入开发者选项 开启USB调试 此时在终端输入adb devices就连接上了 使用adb查看安卓手机架构 adb shell getprop ro.product.cpu.abi 进入安卓手机的shell …

Vue快速入门以及基础标签使用

目录 开始示例el挂载点data数据对象 vue基本标签v-textv-htmlv-on计数器示例实现v-showv-ifv-bind图片切换示例v-forv-on补充v-model axios网络请求axios基本使用vue中使用axios 开始示例 1.首先在html页面中引入vue的生产环境&#xff0c;在body标签中粘上下面代码 <scrip…

wordpress搭建博客教程总结_01主题配置

目前搭建效果站 薪火相传 (yuetan.wang) 日间 月间 爱心 页面、 爱心冲击波! (yuetan.wang) 好看的主题分享 个人博客主题分享(WordPress) – Echo小窝 博客主要效果 1. Argon

Meta 推出 SeamlessM4T,无缝翻译和转录语音和文本

SeamlessM4T允许跨语音和文本单元进行评估的 BLASER 2.0 进行测试时&#xff0c;与目前最先进的语音到文本任务模型相比&#xff0c;SeamlessM4T 模型在语音到文本任务中对抗背景噪声和说话者变化的表现更好 Meta 宣布推出 SeamlessM4T&#xff0c;一种基础的多语言和多任务模…

网络编程——套接字和字节序

目录 一、BSD套接字接口1.1 套接字类型1.2 套接字的位置 二、字节序2.1 大小端2.2 大小端判断2.3 主机字节序和网络字节序2.4 字节序转换函数 一、BSD套接字接口 BSD套接字接口是BSD的进程间通信的方式&#xff0c;它不仅支持各种形式的网络应用而且它还是一种进程间通信的机制…

如何撰写具有传播力的品牌软文?

企业为了能将自己的品牌宣传推广出去&#xff0c;不论是在品牌初创还是成熟阶段都会撰写很多的新闻软文稿件发布在各大媒体平台上&#xff0c;为的就是能起到持续宣传和影响的效果&#xff01; 软文不但要求短小精悍&#xff0c;更注重内容的精准。不管是什么类型的文章&#…

[当前就业]2023年8月25日-计算机视觉就业现状分析

计算机视觉就业现状分析 前言&#xff1a;超越YOLO&#xff1a;计算机视觉市场蓬勃发展 如今&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;新版本的发布周期很快&#xff0c;每次迭代的性能都优于其前身。每 3 到 4 个月就会推出一个升级版 YOLO 变体&#xf…

计网第四章(网络层)(三)

IPV4地址的应用规划&#xff1a; 定长的子网掩码FLSM&#xff1a; 使用同一个子网掩码划分子网&#xff0c;每个子网所分配的IP地址数量相同&#xff0c;造成IP地址的浪费。 变长的子网掩码VLSM&#xff1a; 使用不同的子网掩码划分子网&#xff0c;每个子网所分配的IP地址…

ensp-Ipv6配置配置

ensp-Ipv6配置配置 &#x1f4ce;ipv6.zip&#x1f4ce;Ipv6 网络.docx

n-皇后问题(DFS)

n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n&#xff0c;请你输出所有的满足条件的棋子摆法。 输入格式 共一行&#xff0c;包含整数 n。 输出…

神经网络架构:最新进展和未来挑战

文章目录 1. 神经网络架构的演化历程1.1 感知机&#xff08;Perceptron&#xff09;1.2 多层感知机&#xff08;Multi-layer Perceptron&#xff0c;MLP&#xff09;1.3 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;1.4 循环神经网络&…