📄 sharemem.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 + -