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

📄 sharemem.cpp

📁 VW2010芯片的控制程序和库
💻 CPP
字号:
#include "sharemem.h"

CMyshm::CMyshm(int mode, int size, int offset=0)
{
	key_t key;
//	char* name = "/var/myshmem";

	m_shmState = SHM_ERR;
	m_mode = CLIENT_MODE ;
	m_offset = offset;

	key = USER_KEY;
//	printf("ftok = %d\n",key);
	if(mode == SERVER_MODE){	//server mode , need to create the shared memory
		m_mode = SERVER_MODE ;
		if((m_shmid = shmget( key, size , SHM_MODE|IPC_CREAT))<0 ){
			printf("CODEC:create share memory error!\n");
		}else if(((void *)m_shmptr = shmat(m_shmid, 0 , 0)) == (void *) -1)
		{
			printf("map share memory error!\n");
		}else {
			m_shmState = SHM_WRITE;
			*(m_shmptr+ m_offset) = SHM_WRITE;
		}
	}
	else{	//client mode, 
		if((m_shmid = shmget( key, 0, SHM_MODE))<0 ){
			printf("CODEC:find share memory error!\n");
		}else if(((void *)m_shmptr = shmat(m_shmid, 0 , 0)) == (void *) -1)
		{
			printf("map share memory error!\n");
		}else {
			m_shmState = SHM_WRITE;
			*(m_shmptr+ m_offset) = SHM_WRITE;
		}
	}
}

CMyshm::~CMyshm()
{
	if((shmdt( m_shmptr ))<0 ){
		printf("shmdt() detach share memory error!\n");
	}else if(m_mode == SERVER_MODE){
		if(	shmctl(m_shmid, IPC_RMID, 0) < 0 ){
			printf("shmctl() remove share memory error!\n");
		}
	}
}

bool CMyshm::writeShareMem(char * data)
{
	m_shmState = *m_shmptr;
	int len = strlen(data);	//length of string
	if(m_shmState == SHM_ERR)	return FALSE;
	
	if(m_shmState != SHM_WRITE )
	{
		printf("ShareMemory: waiting to write..\n");
		return FALSE;
	}	
	memcpy( m_shmptr+ m_offset +1, data, len);
	*(m_shmptr+ m_offset +1+len) = '\0' ;
	*(m_shmptr+ m_offset ) = SHM_READ;
	m_shmState = SHM_READ;
//*/
	return TRUE;
}

bool CMyshm::readShareMem(char * data)
{
	m_shmState = *(m_shmptr+ m_offset );
	int len ;
	if(m_shmState == SHM_ERR)	return FALSE;
	
	if( m_shmState != SHM_READ )
	{
		return FALSE;
	}
	len = strlen(m_shmptr+ m_offset +1);	//length of string
	memcpy( data, m_shmptr+ m_offset +1, len);
	data[len] = '\0' ;
	*(m_shmptr+ m_offset ) = SHM_WRITE;
	m_shmState = SHM_WRITE;

//*/
	return TRUE;
}

int 	CMyshm::getState()
{
	return *(m_shmptr+ m_offset );
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -