⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yssegment.h

📁 电力故障信息采集,主要是针对南自的保护装置,这个程序用在Linux操作系统下
💻 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 + -