在Linux下进行数据相比较大的进程间通信时,共享内存是最高效的办法。
(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);
- }