麻煩解釋一下 attach_shm()

看板PttCurrent作者 (啦啦:)我是好in2)時間23年前 (2002/06/27 00:48), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
void *attach_shm(int shmkey, int shmsize) { void *shmptr; int shmid; char *empty_addr; /* set up one page in-accessible -- jochang */ { int fd = open("/dev/zero",O_RDONLY); int size = ((shmsize + 4095) / 4096) * 4096; munmap( (empty_addr=mmap(0,4096+size,PROT_NONE,MAP_PRIVATE,fd,0))+4096 ,size); close(fd); } shmid = shmget(shmkey, shmsize, 0); if(shmid < 0) { shmid = shmget(shmkey, shmsize, IPC_CREAT | 0600); if(shmid < 0) attach_err(shmkey, "shmget"); shmptr = (void *)shmat(shmid, NULL, 0); if(shmptr == (void *)-1) attach_err(shmkey, "shmat"); } else { shmptr = (void *)shmat(shmid, NULL, 0); if(shmptr == (void *)-1) attach_err(shmkey, "shmat"); } /* unmap the page -- jochang */ { munmap(empty_addr,4096); } return shmptr; } 為什麼要 mmap ?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.143
文章代碼(AID): #z6V1FPR (PttCurrent)