1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <sys/ipc.h> #include <sys/shm.h> #include "ShareMemory.h"
ShareMemory::ShareMemory(int key) { m_shmID = getShmID(key, 0, 0); }
ShareMemory::ShareMemory(int key, int size) { m_shmID = getShmID(key, size, IPC_CREAT | 0755); }
ShareMemory::ShareMemory(const char* name) { key_t key = ftok(name, RandX); m_shmID = getShmID(key, 0, 0); }
ShareMemory::ShareMemory(const char* name, int size) { key_t key = ftok(name, RandX); m_shmID = getShmID(key, size, IPC_CREAT | 0755); }
int ShareMemory::getShmID(key_t key, int shmSize, int flag) { m_shmID = shmget(key, shmSize, flag); if(m_shmID<0) { return -1; } return m_shmID; }
ShareMemory::~ShareMemory() { }
void *ShareMemory::mapShm() { m_shmAddr = shmat(m_shmID, NULL, 0); if(m_shmAddr==(void *)-1) { return NULL; } return m_shmAddr; }
int ShareMemory::unmapShm() { int ret = shmdt(m_shmAddr); return ret; }
int ShareMemory::delShm() { int ret = shmctl(m_shmID, IPC_RMID, NULL); return ret; }
|