系统相关
首页 > 系统相关> > Linux笔记--共享内存

Linux笔记--共享内存

作者:互联网

介绍

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

函数

//创建并获取共享内存区
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