(1)create shared mem: shmget();
(2)map shared mem: shmat();
shmget()
int shmget(key_t key, int size, int shmflg);
返回值:成功,返回shared mem 的段标识符;失败,返回-1.
shmat()
int shmat( int shmid, char *shmaddr, int shmflg);
返回值:成功,返回shared mem链接到进程中的地址;失败,返回-1.
shmdt()
不再需要共享内存段时,将其从地址空间中脱离。
int shmdt( char *shmaddr);
#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> #include <stdlib.h> #define BUFSZ 2048 int main() { int shmid; char *shmadd; //创建共享内存 if((shmid=shmget(IPC_PRIVATE,BUFSZ,0666))<0) { perror("shmget"); exit(1); } else printf("created shared-memory: %d\n",shmid); system("ipcs -m"); //ipcs -m:显示所有进程间通信的状态 //映射共享内存 if((shmadd=shmat(shmid,0,0))<(char *)0){ perror("shmat"); exit(1); } else printf("attached shared-memory\n"); system("ipcs -m"); //取消共享内存映射 if((shmdt(shmadd))<0){ perror("shmdt"); exit(1); } else printf("deleted shared-memory\n"); system("ipcs -m"); exit(0); }