📄 yssegment.h
字号:
#ifndef YSSEGMENT_H#define YSSEGMENT_H#include "ysheader.h"#include "YsString.h"#include "yspubfunction.h"//*********************共享内存类的定义*****************//class CSegment{ public: CSegment() { return; } ~CSegment() { return; } public: int m_SegmentQid; //共享内存的qid public: int Open_Segment(key_t keyval,int iSize,bool bExcl=false) //创建一个共享内存 { int shmid=0; if(!bExcl) { if((shmid=shmget(keyval,iSize,IPC_CREAT|0660))==-1) return -1; } else { if((shmid=shmget(keyval,iSize,IPC_CREAT|IPC_EXCL))==-1) return -1; } return shmid; } void *Attach_Segment(int shmid) //返回内存段连接的地址 { return ((void*)shmat(shmid,0,0)); } int DisAttach_Segment(void* segptr) { return shmdt((char*)segptr); } void Write_Segment(void *segptr,void *pSrc,int iSize) //写内存 { memcpy(segptr,pSrc,iSize); } void Read_Segment(void *segptr,void *pDes,int iSize) //读内存 { memcpy(pDes,segptr,iSize); } void Remove_Segment(int shmid) //删除内存 { shmctl(shmid,IPC_RMID,0); } void Change_SegmentMode(int shmid,char *mode) //改变内存模式 { struct shmid_ds myshmds; shmctl(shmid,IPC_STAT,&myshmds); sscanf(mode,"%ho",&myshmds.shm_perm.mode); shmctl(shmid,IPC_SET,&myshmds); } int WriteSegment(void *pSrc,int iSize,bool bExcl=true) { int count=0;int shmid=-1; if(!pSrc||iSize<=0) return -1; while(shmid==-1&&count<10) { key_t keyval=_getKeyId();shmid=Open_Segment(keyval,iSize,bExcl);count++; } if(shmid<0) return -1; void* segptr=Attach_Segment(shmid); if(!segptr) { Remove_Segment(shmid);return -1; } Write_Segment(segptr,pSrc,iSize);DisAttach_Segment(segptr); return shmid; } void ReadSegment(int shmid,void *pDes,int iSize,bool bDelete=true) { if(shmid<=0) return; void* segptr=Attach_Segment(shmid); if(segptr==NULL) return; if(pDes==NULL) { Remove_Segment(shmid);DisAttach_Segment(segptr);return; } Read_Segment(segptr,pDes,iSize); if(bDelete) Remove_Segment(shmid); DisAttach_Segment(segptr); }};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -