它是内存数据传递速度最快的,所以在很多时候都会用到共享内存的通信机制。
1,获得key值
ftok(argv[1],'k'))
2,创建共享内存获得ID;
shm_id = shmget(key,1024,IPC_CREAT | 0666))
3,映射共享内存
shmat(shm_id,NULL,0)
4,解除映射
shmdt(add);
5,删除共享内存add
*int shmget(key_t key, size_t size, int shmflg);
*第一个参数:
*1.IPC_PRIVATE,每次都会获得一个新的共享内存,主要用于有亲缘关系的进程
*2.通过ftok函数获得
* key_t key;
* key = ftok(pathname,字符);
*
*第二个参数:
*共享内存大小
*
*第三个参数:
*IPC_CREAT,IPC_EXCL,权限
*/
//如果对应的key的共享内存不存在,创建,然后返回其ID
shmctl(shmid,cmd,NULL)
read.cpp
key_t key=ftok(".",1);
6 int shmid = shmget(key,0,0);
7 char *addr = (char *)shmat(shmid,NULL,0);
8 std::cout<<"get "<<*(++addr);
write.cpp
key_t key=ftok(".",1);
7 int shmid = shmget(key,512,IPC_CREAT| 0666);
8 char *addr=(char *)shmat(shmid,NULL,0);
9 strcpy(addr,"cwxOOOOO");
10 // *addr ='m';
11 // std::cout<<*addr;
12 // shmdt(addr);
13 // shmctl(shmid,IPC_RMID,NULL);