共享内存函数

==========共享内存=============
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
功能
	获取或者设置共享内存的相关属性

你可能感兴趣的:(学习笔记,笔记,服务器,前端)