C共享内存读写结构体中的内容

2023-11-04

myshm.h

#ifndef __MYSHM_H__
#define __MYSHM_H__

#define N 			(1)
#define PAGESIZE    (4096)

struct mydata{
	int a;
	int b;
};

#endif


shm_write.c

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#include <errno.h>
#include "myshm.h"

int main(int argc, char const *argv[])
{
	int shmid;
	struct mydata *p;

	struct mydata data[3] = {
		[0] = {
			.a = 1,
			.b = 2,
		},
		[1] = {
			.a = 3,
			.b = 4,
		},
		[2] = {
			.a = 5,
			.b = 6,
		},
	};

	key_t keyval = ftok("/",'A');
	
	shmid = shmget(keyval,N*PAGESIZE,IPC_CREAT | IPC_EXCL | 0777);
	if(shmid < 0)
	{
		if(errno == EEXIST)
		{
			shmid = shmget(keyval,0,0);
		}
		else
		{
			perror("shmget");
			return -1;
		}
	}

	p = shmat(shmid, NULL, 0);
	if(p == (struct mydata*)(-1))
	{
		perror("shmat");
		return -2;
	}
#if 0
	strcpy(p, "hello world");
#else
	printf("sizeof(data)=%lu\n", sizeof(data));
	memcpy(p, data, sizeof(data));  
#endif

	shmdt(p);
	
	return 0;
}


shm_read.c

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <errno.h>
#include "myshm.h"

int main(int argc, char const *argv[])
{
	int shmid = 0;
	int i;
	struct mydata *p;

	key_t keyval = ftok("/",'A');
	
	shmid = shmget(keyval, N*PAGESIZE, IPC_CREAT|IPC_EXCL|0777);
	if(shmid < 0)
	{
		if(errno == EEXIST)
		{
			shmid = shmget(keyval,0,0);
		}
		else
		{
			perror("shmget");
			return -1;
		}
	}

	p = shmat(shmid, NULL, 0);
	if(p == (struct mydata *)(-1))
	{
		perror("shmat");
		return -2;
	}
	
#if 0	
	printf("share memry :%s\n", p);
#else
	for(i=0; i<3;++i)
		printf("share mem :p[%d]=%d,p[%d]=%d\n", i, p[i].a, i, p[i].b);

#endif
	shmdt(p);

	return 0;
}

测试结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C共享内存读写结构体中的内容 的相关文章

  • 如何创建语法突出显示文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 C Net 创建语法突出显示文本框 Take 闪烁网 http scintillanet codeplex com 并采取其
  • 如何用另一个静态变量初始化一个静态变量?

    静态1 hpp include
  • 为什么 fgets 接受 int 而不是 size_t?

    功能如strcpy malloc strlen 和其他各种接受他们的参数或返回值作为size t代替int or an unsigned int出于显而易见的原因 一些文件功能 例如fread and fwrite use size t以及
  • C 中的 '\0' 和 printf()

    在 C 入门课程中 我了解到在存储字符串时存储空字符 0在它的最后 但是如果我想打印一个字符串怎么办 printf hello 虽然我发现它并没有结束 0通过以下声明 printf d printf hello Output 5 但这似乎不
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 如何生成可变参数包?

    给定不相关的输入是否可以生成非类型参数包 我的意思是 我想改变这一点 template
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 可以通过模板间接访问基类中的私有类型

    我试图在编译时根据类型是否在给定范围内公开可用来选择要使用的类型 最好直接看代码 include
  • ef core 在更新数据库期间不使用 ASPNETCORE_ENVIRONMENT

    我使用 Visual Studio 通过一定的迁移来更新我的所有环境 使用下面的命令效果很好 update database Migration initMigrationProduct c ProductContext Environme
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio
  • 如何在 C 语言中获取输入中的空格

    我想从控制台获取字符数组 它还包含空格 我在 C 中知道的唯一方法是 scanf 但是一旦遇到空格 它就会停止接受输入 我该做什么 这就是我正在做的事情 char address 100 scanf s address 尝试使用 fgets
  • 解析连接字符串

    是否有标准库或代码片段可以使用这样的连接字符串获取值 string connstr DataServiceUrl http localhost foo RemoteServerConnection server http localhost
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • 当分配返回 0 时,具有空异常规范的运算符 new 调用构造函数

    我有以下声明 void operator new size t s PersistentMemory m throw return m gt allocatePersistentMemory s 我正在测试启动时的内存耗尽 这会导致m gt
  • 如何将 Boost Spirit 自动规则与 AST 结合使用?

    编辑 当我想在另一个规则上使用它时 我扩展了 sehe 的示例以显示问题 http liveworkspace org code 22lxL7 http liveworkspace org code 22lxL7 17 我正在尝试提高 Bo
  • 快速将文本附加到文本框

    我有一个BackgroundWorker正在发布消息的线程 使用BeginInvoke在 GUI 中的文本框中 方法 write debug text 在文本框中显示文本使用AppendText并将文本写入Console 外观上是这样的Ba
  • 如何在 stl 模板中使用导出类 (__declspec(dllexport))?

    我正在使用导出的类 class declspec dllexport myclass private template declspec dllexport class std map
  • 使用 DataGridViewCheckboxCell 真正禁用 DataGridView 中的复选框

    有谁知道如何使用 DataGridViewCheckboxCell 禁用 DataGridView 中的复选框 我可以将其设置为只读 并设置背景颜色 但我无法让复选框本身显示为禁用状态 有什么想法吗 Guess 你必须自己画 http so
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin

随机推荐

  • 【数据结构】八大排序算法详解

    作者 情话0 0 专栏 数据结构 个人简介 一名双非编程菜鸟 在这里分享自己的编程学习笔记 欢迎大家的指正与点赞 谢谢 排序 前言 一 概述 1 排序的稳定性 2 排序的分类 3 排序算法的性能评价 二 排序算法的实现 1 插入类排序 1
  • 其他文章太水,从头到尾写一篇rabbitmq,含Springboot整合rabbitmq

    文章目录 安装跳过 不会的请百度 这篇文章主要记录理论以及编码 什么是rabbitmq 基本概念 不与SpringBoot整合的写法 先写一个工具类 获取连接等 简单队列模式 模型 生产者生产消息 消费者接受消息 简单消息队列不足 Work
  • leetcode算法面试题:插入区间问题、乘积最大子数组问题

    题目 给你一个 无重叠的 按照区间起始端点排序的区间列表 在列表中插入一个新的区间 你需要确保列表中的区间仍然有序且不重叠 如果有必要的话 可以合并区间 示例 1 输入 intervals 1 3 6 9 newInterval 2 5 输
  • Qt Creato配置PCL库

    Qt Creator中使用PCL库 业务不精er的博客 CSDN博客 Qt6 1 0中配置pcl1 11 1 qt6导入pcl库 朽一的博客 CSDN博客 VS2017 中配置QT PCL显示点云或3D图形 pcl显示3d图tiff 桂林巡
  • 【Flutter -- 基础组件】Flutter 页面

    文章目录 1 MaterialApp 1 1 代码 1 2 效果图 2 Scaffold 2 1 代码 2 2 效果图 3 AppBar 3 1 代码 3 2 效果图 4 Text 4 1 代码 4 2 效果图 5 RichText 5 1
  • 设计分享

    目录 具体实现功能 设计介绍 51单片机简介 设计思路 设计内容 仿真图 protues8 7 程序 Keil5 具体实现功能 单片机控制8个LED实现从左到右的循环移动 设计介绍 51单片机简介 51单片是一种低功耗 高性能CMOS 8位
  • 2022年我的个人总结以及2023年的展望

    2022年公众号文章总共发布了 140篇 感谢大家的关注 在我的视角中2022这一年给我带来了了丰富的成长空间 再次认识到技术不只是技术代码 更多的还是思路和想法 技术的征途中学无止境 在有限的生命中我也在今年投入了许多生活的时间 2023
  • Spring 常用注解汇总和使用

    大家好 我是猿码 又是一个双休 春节马上就要到了 面对疫情的不确定性 你们今年能否回家呢 注解在 Java 开发中非常常见 随着 Spring 系列的框架逐渐占据主流 知道 Spring 都有哪些注解以及它们的作用至关重要 也某种程度的决定
  • 记录:vuecli按需引入elementui

    安装依赖 npm install babel plugin component D npm install babel preset env D 修改babel config js module exports presets vue cl
  • windows安装elasticsearch和kibana的安装配置教程

    Elasticsearch 和 Kibana 的最新稳定版本是 7 x 系列 而不是 8 9 1 版本 然而 我可以提供安装 Elasticsearch 7 x 和 Kibana 7 x 的配置教程 以下是安装 Elasticsearch
  • ORA-01034: ORACLE not available如何解决

    C Users 10299 gt sqlplus as sysdba SQL Plus Release 11 2 0 1 0 Production on 星期五 3月 24 11 32 56 2023 Copyright c 1982 20
  • 交叉编译grpc

    近期需要使用grpc在目标主机使用 参考了官方示例 大部分网上教程完成了本篇grpc的交叉编译 并对参考的教程做出了引用 文章目录 交叉编译grpc 1 安装交叉编译库 2 Pre requisites 2 1 ubuntu16 04升级g
  • SVN 检出操作

    上一章中 我们创建了版本库runoob01 URL为svn 192 168 0 1 runoob01 svn用户user01有读写权限 我们就可以通过这个URL在客户端对版本库进行检出操作 svn checkout http svn ser
  • 全国职业技能大赛云计算--高职组赛题卷⑤(私有云)

    全国职业技能大赛云计算 高职组赛题卷 私有云 第一场次题目 OpenStack平台部署与运维 任务1 基础运维任务 5分 任务2 OpenStack搭建任务 15分 任务3 OpenStack云平台运维 15分 任务4 OpenStack云
  • flutter 国内镜像https://storage.flutter-io.cn/ 用不了了 502 Bad Gateway trying to find package path at https

    今天 创建一个插件plugin 到pub get的时候爆了一堆超时 502 502 Bad Gateway trying to find package path at https pub flutter io cn 并一直在重试 结果是国
  • springboot3 多环境日志系统配置的问题,无法动态切换dev和prod,以及多环境日志系统的配置,和自动动态切换日志系统,include标签无法获取配置文件的active值

    今天做一个多环境的日志系统 yml文件里面写dev 就使用 dev的日志系统 如果是prod 就指定开发环境的日志系统 结果今天倒好 写是写了 无法解析 老是在后面加一个 is undefined的字符 我不知道这么回事 直到我用if和el
  • 2023.5.15.进度汇报(自用

    一 pyqt小应用 浏览器 1 创建菜单栏及主要分栏 2 创建工具栏 添加主要按钮 3 工具栏中添加地址栏
  • 项目辅助学习 Qt 5

    特点 Qt 5 是一个应用程序开发框架 可提供出色的用户体验并使用 Qt Widgets QML 甚至 Qt 3D 开发全功能应用程序 了解 Qt 框架 以及解决严重问题 例如链接 调试和多线程 所需的工具 内容 Qt 5 入门 项目基本结
  • [论文阅读] (30)李沐老师视频学习——3.研究的艺术·讲好故事和论点

    娜璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者的英文水平和学术能力不高 需要不断提升 所以还请大家批评指正 非常欢迎大家给我留言评论 学术路上期待与您前行 加油 前一篇带来李沐老师对论文写作
  • C共享内存读写结构体中的内容

    myshm h ifndef MYSHM H define MYSHM H define N 1 define PAGESIZE 4096 struct mydata int a int b endif shm write c includ