ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux笔记--共享内存

2020-12-22 10:01:56  阅读:220  来源: 互联网

标签:共享内存 shmaddr struct -- sbuf int Linux shmid include


介绍

共享内存是一段物理数据区域,可以被映射到多个进程进行直接读写访问。十分方便。
使用方式是 创建–映射–直接使用–取消映射–删除共享内存

函数

//创建并获取共享内存区
int shmget(key_t key, size_t size, int shmflg);
//映射内存
void *shmat(int shmid, const void *shmaddr, int shmflg);
//取消映射
int shmdt(const void *shmaddr);
//共享内存控制--用于删除共享内存区
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

举例

shareWrite.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <string.h>

#define SHMKEY 1234
#define SHMSIZE 4096

struct shmbuf{


	char sbuf[32];
};

int main(){
	int shmid;
	void *shmaddr;
	struct shmbuf *sbuf;
		
	shmid = shmget(SHMKEY,SHMSIZE,IPC_CREAT|0666);
	if(shmid == -1){
		
		perror("shmget");
		exit(1);
	}	

	shmaddr = shmat(shmid,NULL,0);
	if(shmaddr == NULL){
		
		perror("shmat");
		exit(1);
	}
		
	sbuf = (struct shmbuf*)shmaddr;	
	strcpy(sbuf->sbuf,"Hello,This is a shm test!");
	printf("Send the msg");
		
	shmdt(shmaddr);
	while(1);
	
	return 0;
}

shareRead.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <string.h>

#define SHMKEY 1234
#define SHMSIZE 4096

struct shmbuf{


	char sbuf[32];
};

int main(){

	int shmid;
	void *shmaddr;
	struct shmbuf *sbuf;
		
	shmid = shmget(SHMKEY,SHMSIZE,0);
	if(shmid == -1){
		
		perror("shmget");
		exit(1);
	}	

	shmaddr = shmat(shmid,NULL,0);
	if(shmaddr == NULL){
		
		perror("shmat");
		exit(1);
	}
		

	sbuf = (struct shmbuf*)shmaddr;
	printf("Got the msg: %s\n",sbuf->sbuf);

	shmdt(shmaddr);
	shmctl(shmid,IPC_RMID,NULL);

	return 0;
}

标签:共享内存,shmaddr,struct,--,sbuf,int,Linux,shmid,include
来源: https://blog.csdn.net/weixin_40293570/article/details/111505444

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有