前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++下shm共享内存模块

C++下shm共享内存模块

作者头像
看、未来
发布于 2020-08-26 02:44:11
发布于 2020-08-26 02:44:11
1.4K00
代码可运行
举报
运行总次数:0
代码可运行
共享内存(这是IPC最快捷的方式)
是什么

我的第一个服务器项目分了前后端,而其中前后端的数据通讯就是使用shm共享内存的方式,所以对于这块会比较有感觉。

1、共享内存是在多个进程之间共享内存区域的一种进程间的通信方式。 2、它是在多个进程间通过对指定内存段进行映射实现内存共享的。 3、这是IPC最快捷的方式,因为它没有中间商赚差价。 4、多个进程间共享的是同一块物理空间,仅仅是挂载地址不同而已,因此不需要进行复制,可以直接使用这段空间。

怎么用

1、创建共享内存函数shmget()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*shmget函数用于创建一个新的内存段,或者打开一个原有的内存段*/
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key,size_t size,int shmflg);

参数释义:shmflg取值范围:IPC_CREAT、IPC_EXCL

2、共享内存挂载到进程下函数shmat()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//该函数用于将开辟好的共享内存挂载到本进程名下
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid,const void *shmaddr,int shmflg);

参数释义: shmid:上面那个函数的返回值。 shmaddr:一般放0,系统就会自己去找一块为映射的地址。

3、断开共享内存连接函数shmdt()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//从进程中删除共享内存与从内核中删除共享内存是两个概念
#include <sys/types.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr);

4、共享内存控制函数shmctl()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <sys/types.h>
#include <sys/shm.h>
int shmctl(int shmid,int cmd,struct shmid_ds *buf);

参数释义: cmd:IPC_STAT:获取内存段的shmid_ds结构,用buf传出。 IPC_SET:设置内存段中的shmid_ds结构下的ipc_perm成员的值,从buf里面获得。 IPC_RMID:标记某个内存段,已备删除。(只有当连接该内存段的最后一个进程与他断开连接之后才会执行删除)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct shmid_ds
{
	struct ipc_perm msg_perm;	//后面写
	size_t shm_segsz;			//段大小,以字节为单位
	time_t shm_atime;			//最后挂载时间
	time_t shm_dtime;			//最后卸载时间	
	time_t shm_ctime;			//最后修改时间
	pid_t shm_cpid;				//建立者
	pid_t shm_lpid;				//最后一个at/dt操作的进程PID
	shmatt_t shm_nattch;		//现挂载数量
···
}

//下面这个是关键
struct ipc_perm
{
	key_t key;			//键值
	uid_t uid;			
	gid_t gid;			//用户GID
	uid_t cuid;			
	gid_t cgid;			//建立者GID
	unsigned short mode;//权限
	unsigned short seq;	//序列号
}

我的服务器shm模块 提取码:r3ne

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 共享内存(这是IPC最快捷的方式)
    • 是什么
    • 怎么用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档