SystemV IPC 共享內存

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章