#include "Shmem.h"
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <iostream>
using namespace std;
CShmem::~CShmem(void)
{
}
SHSTATUS
CShmem::CreateShareBlock( int key, /* Block ID user defined. */
long blockSize, /* Block size, in bytes. */
void **blockAddress ) /* Returned block address. */
{
void *localAddress; /* Temporary address placeholder. */
int blkID; /* Our entry in the block ID table. */
blkID = shmget(key, blockSize, IPC_CREAT | 0666);
localAddress = shmat(blkID, *blockAddress, 0666);
if ((void*)-1 == localAddress)
{
return ERRORFAILED;
}
*blockAddress = localAddress;
return ERROROK;
}
SHSTATUS
CShmem::DestroyShareBlock(int key, /* Block ID user defined. */
long blockSize, /* Block size, in bytes. */
void **blockAddress ) /* Returned block address. */
{
int blkID; /* Our entry in the block ID table. */
blkID = shmget(key,blockSize, 0666);
if(blkID != -1)
{
if(*blockAddress != (void*)-1)
{
shmdt(*blockAddress);
shmctl(blkID,IPC_RMID,0);
*blockAddress = NULL;
return ERROROK;
}
}
return ERRORFAILED;
}