看板 PttCurrent 關於我們 聯絡資訊
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