当前位置: 首页 > news >正文

共享内存使用举例

查看共享内存使用情况
ipcs   -m

删除指定key的共享内存
ipcrm -m shmid

 

例一:

server.c (创建共享内存并写入数据)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>// 定义学生结构体
typedef struct
{int id;char name[32];float score;
} Student;// 定义班级结构体(包含多个学生)
typedef struct
{int count;Student students[10]; // 假设班级最多10人
} Classroom;int main()
{// 1. 创建共享内存int shmid = shmget((key_t)12345, 1024, 0666 | IPC_CREAT);if (shmid == -1){perror("shmget failed");exit(EXIT_FAILURE);}// 2. 映射共享内存Classroom *shared_class = (Classroom *)shmat(shmid, NULL, 0);if (shared_class == (void *)-1){perror("shmat failed");exit(EXIT_FAILURE);}// 3. 写入班级数据shared_class->count = 3; // 班级有3名学生// 学生1shared_class->students[0].id = 1001;strcpy(shared_class->students[0].name, "张三");shared_class->students[0].score = 89.5f;// 学生2shared_class->students[1].id = 1002;strcpy(shared_class->students[1].name, "李四");shared_class->students[1].score = 92.0f;// 学生3shared_class->students[2].id = 1003;strcpy(shared_class->students[2].name, "王五");shared_class->students[2].score = 78.5f;printf("数据已写入共享内存,按任意键释放资源...\n");getchar();// 4. 断开映射if (shmdt(shared_class) == -1){perror("shmdt failed");}// 5. 删除共享内存if (shmctl(shmid, IPC_RMID, 0) == -1){perror("shmctl failed");}return 0;
}

client.c (读取共享内存数据)

#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>// 必须与server.c中的定义一致
typedef struct {int id;char name[32];float score;
} Student;typedef struct {int count;Student students[10];
} Classroom;int main() {// 1. 获取共享内存int shmid = shmget((key_t)12345, 0, 0666);if(shmid == -1) {perror("shmget failed");exit(EXIT_FAILURE);}// 2. 映射共享内存Classroom *shared_class = (Classroom *)shmat(shmid, NULL, 0);if(shared_class == (void *)-1) {perror("shmat failed");exit(EXIT_FAILURE);}// 3. 读取并显示数据 printf("班级人数: %d\n", shared_class->count);for(int i = 0; i < shared_class->count; i++) {printf("学生%d: ID=%d, 姓名=%s, 分数=%.1f\n",i+1,shared_class->students[i].id,shared_class->students[i].name,shared_class->students[i].score);}// 4. 断开映射if(shmdt(shared_class) == -1) {perror("shmdt failed");}return 0;
}

输出结果:

image

 image

http://www.wxhsa.cn/company.asp?id=974

相关文章:

  • 【QML】解决 Qt C++ 正则表达式中文匹配问题
  • C# 内存泄漏
  • 产品包装盒这样制作,再也不用到处求人啦!超简单的上手方法分享!
  • FunctionAI 图像生成:简化从灵感到 API 调用的每一步
  • ​​电力系统的“慧眼”:深入解析电流互感器的核心用途​​
  • 2025.9记录
  • AQS
  • TVBox中的Python接口解读
  • 一、CPU的功能和基本结构
  • DevOps时代的知识管理革命:如何构建智能化的研发决策中枢
  • P1099 [NOIP 2007 提高组] 树网的核
  • [GenAI] 外接DeepSeek
  • 一个简单美观的文件时间修改器
  • 暗黑类游戏属性系统程序设计思路3.0
  • 完整教程:毕设课题:基于Node.js+Express框架+Mysql数据库的助农农产品销售商城设计与实现
  • 经典的混合加密传输协议—PGP
  • 2025年互联网行业专业工艺认证发展指南
  • 基本数据类型转换
  • C# Avalonia 13- MoreDrawing - VisualLayer
  • Linux 设置nginx 以及java jar自启动
  • DevelPy-TryHackMe
  • 记录一次解决phpstudy启动数据库自动关闭的问题方法
  • cache redis
  • 《爱上情感:自然魅力的社交》
  • Java的基本数据类型
  • H5游戏性能优化系列-----配置相关优化
  • 300 毫秒生成情感 AI 视频,Nuance Labs 获千万美元融资;AirPods Pro 3 将集成实时语音翻译丨日报
  • 认知引擎:企业下一个决胜分水岭
  • node.js安装地址
  • 【已解决】git Encountered 3 file(s) that should have been pointers, but werent