共享内存函数

==========共享内存=============
1)操作步骤
		(1)使用ftok函数获取键值
		(2)使用shmget函数获取共享内存ID
		(3)使用shmat函数将共享内存映射至本进程虚拟内存空间的某个区域
		(4)不再使用时使用shmdt解除映射关系
		(5)当没有进程需要使用这块内存时使用shmctl函数删除他
key_t ftok(路径,号码);//key
int shmget(key_t key, size_t size, int shmflg);	//shmid
key		--->共享内存的键值
size	--->共享内存的大小(PAGE_SIZE的整数倍) //1024
shmflg	--->IPC_CREAT		--->如果key对应的共享内存不存在,就创建
			IPC_EXCL		--->如果该key对应的额共享内存已经存在,就报错
			SHM_HUGETLB		--->使用"大页面"来分配共享内存
			SHM_NORESERVE	--->不在交换分区中为这块共享内存保留空间
			mode 			--->共享内存的访问权限(0664)

void *shmat(int shmid, const void *shmaddr, int shmflg);
shmid		--->共享内存的ID
shmaddr		--->如果写为NULL,系统会自动选择一个合适的虚拟内存空间地址去映射共享内存,一般选择写NULL
				如果不为NULL,系统会根据shmaddr来选择一个合适的内存区域,不为NULL时SHM_RND必须设置
shmflg		--->SHM_RDONLY		--->以只读方式映射共享内存
				SHM_REMAP		--->重新映射,此时shmaddr不能为NULL
				SHM_RND			--->自动选择比shmaddr小的最大页对齐地址
				0				--->可读可写的方式映射共享内存

int shmdt(const void *shmaddr);
将共享内存从当前进程解除映射,之后进程不能再允许访问SHM

int shmctl(int shmid, int cmd, struct shmid_ds *buf);
参数 
	shmid		--->共享内存的ID 
	cmd			--->IPC_STAT		--->获取属性信息,放置在buf中
					IPC_SET			--->设置属性信息为buf指向的内容
					IPC_RMID		--->将共享内存标记为"即将被删除"状态 
					IPC_INFO		--->获得关于共享内存的系统限值信息
					SHM_INFO		--->获得系统为共享内存消耗的资源信息
					SHM_STAT		--->同IPC_STAT,但shmid为该SHM在内核中记录所有SHM信息的数组的下标
										因此用过迭代所有的下标可以获得系统所有SHM的相关信息
					SHM_LOCK		--->禁止系统将该SHM交换至swap分区
					SHM_UNLOCK		--->允许系统将该SHM交换至swap分区
	buf			--->属性信息的结构体指针,不需要就设置为NULL
返回值
	成功		--->
					IPC_INFO	--->内核中记录所有SHM信息的数组的下标最大值
					SHM_INFO	--->内核中记录所有SHM信息的数组的下标最大值
					SHM_STAT	--->下标值为shmid的SHM的ID
	失败		--->-1
功能
	获取或者设置共享内存的相关属性
  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一如既往の

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值