http://tonybai.com/2005/09/23/apr-shmem/
匿名共享内存:
【1】
int N=1024; //大小
char *p = mmap(NULL, N, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED,-1,0);
p[0]='A';
p[a]='B';
...
mummap(p,N);
【2】
int N=1024; //大小
int fd=open("/dev/zero", O_RDWR);
char *p = mmap(NULL, N, PROT_READ|PROT_WRITE, MAP_SHARED,fd,0);
...
munmap(p,N);
【3】
int N=1024;
int id=shmget(IPC_PRIVATE,N,0666);
char *p=shmat(id,NUL,0);
...
shmdt(p); //解除
shmctl(id,IPC_RMID,NULL); //拆除
有名共享内存:
【1】
int fd = open("abc", O_RDWR|O_CREAT|O_TRUNC, 0666); 或 un_link("abc");int fd = open("abc", O_RDWR|O_CREAT|O_EXCL, 0666);
ftruncate(fd,1024);
char *p = map(NULL,1024,PROT_READ|PROT_WRITE, MAP_SHARED, fd,0);
p[0]=...
munmap(p,1024);
un_link("abc");
【2】
int fd = shm_open("abc", O_RDWR|O_CREAT|O_TRUNC, 0666); 或 shm_unlink("abc");int fd = shm_open("abc", O_RDWR|O_CREAT|O_EXCL, 0666);
ftruncate(fd,1024);
char *p = map(NULL,1024,PROT_READ|PROT_WRITE, MAP_SHARED, fd,0);
p[0]=...
munmap(p,1024);
unlink("abc");
【3】key_t kt=ftok("abc",0);
int id=shmget(kt,1024,IPC_CREAT|0666);
char *p=shmat(id,NULL,0);
....
shmdt(p);
shmctl(id,IPC_RMID,NULL);