0
点赞
收藏
分享

微信扫一扫

共享内存介绍

伽马星系 2022-03-20 阅读 121

共享内存

1. 获取共享内存的ID号 — shmget() — man 2 shmget

2. 根据共享内存的ID号映射内存空间地址 shmat() -->man 2 shmat

3. 撤销映射 shmdt – man 2 shmdt

4. 设置共享内存的属性(删除共享内存) – shmctl – man 2 shmctl

发送端示例代码

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

int main()
{
	key_t key;
	int shmid;
	
	//1. 申请key值
	key = ftok(".",10);
	
	//2. 根据key值申请共享内存的ID号
	shmid = shmget(key,8192,IPC_CREAT|0666);
	
	//3. 根据shmid去内存空间映射一块内存
	char *p = (char *)shmat(shmid,NULL,0);
	
	//4. 清空内存中数据
	bzero(p,8192);
	
	//5. 从键盘输入数据,写入内存中
	while(1)
	{
		fgets(p,8192,stdin);  // 包含了\n在内
		if(strncmp(p,"quit",4) == 0)
		{
			break;
		}
	}
	
	return 0;
}

接收端示例代码

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

int main()
{
	key_t key;
	int shmid;
	
	//1. 申请key值 
	key = ftok(".",10);
	
	//2. 根据key值申请共享内存的ID号
	shmid = shmget(key,8192,IPC_CREAT|0666);
	
	//3. 根据shmid去内存空间映射一块内存
	char *p = (char *)shmat(shmid,NULL,0);
	
	//4. 读取共享内存的数据
	while(1)
	{
		printf("from shm:%s",p);
		usleep(500000);
		if(strncmp(p,"quit",4) == 0)
		{
			break;
		}
	}
	
	//5. 撤销映射
	shmdt(p);
	
	//6. 删除共享内存
	shmctl(shmid,IPC_RMID,NULL);
	
	return 0;
}
举报

相关推荐

0 条评论