shmget
http://man7.org/linux/man-pages/man2/shmget.2.html
shmat
http://man7.org/linux/man-pages/man2/shmat.2.html
shmctl
http://man7.org/linux/man-pages/man2/shmctl.2.html
shmdt
http://man7.org/linux/man-pages/man2/shmdt.2.html
由於每個進程地址空間不同,共享內存裏的指針應該保存相對地址。
示例:
#define MY_SHM_KEY 0xxxx
#define MY_SHM_SIZE sizeof(XXXX)
int shmId = 0;
char *shmAdr;
shmId = shmget(MY_SHM_KEY, MY_SHM_SIZE, IPC_CREAT | IPC_EXCL | 0777);
if (shmId < 0)
{
if (errno != EEXIST)
{
return -1;
}
shmId = shmget(MY_SHM_KEY, 0, 0);
if (shmId < 0)
{
return -1;
}
}
shmAdr = (char*) shmat( shmId, NULL, 0);
if(shmAdr == (char *)-1)
{
if(shmctl(shmId, IPC_RMID,0) < 0)
{
......
return -2;
}
......
return -1;
}
參考文獻:
https://ubuntuforums.org/showthread.php?t=1671019&page=2
https://stackoverflow.com/questions/10776762/pointers-inside-shared-memory-segment
http://www2.phys.canterbury.ac.nz/dept/docs/manuals/unix/DEC_4.0e_Docs/HTML/MAN/MAN4/0167____.HTM