门户网站设计与开发,郑州百姓网,成都哪里有seo公司,河北廊坊公布新增阳性人员轨迹一#xff0c;共享内存内核管理一片物理内存#xff0c;允许不同的进程同时映射#xff0c;多个进程可以映射同一块内存#xff0c;被多个进程同时映射的物理内存#xff0c;即共享内存。映射物理内存叫挂接#xff0c;用完以后解除映射叫脱接。1#xff0c;共享内存的特…一共享内存内核管理一片物理内存允许不同的进程同时映射多个进程可以映射同一块内存被多个进程同时映射的物理内存即共享内存。映射物理内存叫挂接用完以后解除映射叫脱接。1共享内存的特点:优点是最快的IPC。缺点要编程者自己实现对共享内存互斥访问。如何实现2编程模型具体函数的用法可以用man手册查看(强力推荐)进程A writeshm.c1) 获得key, ftok()2) 使用key来创建一个共享内存 shmget()3) 映射共享内存(得到虚拟地址) shmat()4) 使用共享内存 往共享内存中写入数据5) 解除映射 shmdt()6) 如果共享内存不再使用可以使用shmctl()销毁共享内存进程B readshm.c1) 获得key, ftok()2) 使用key来获得一个共享内存 shmget()3) 映射共享内存(得到虚拟地址) shmat()4) 使用共享内存 读取共享内存中的数据5) 解除映射 shmdt()3实例进程A//writeshm.c#include#include#include#include#include#includeintmain(){//生成一个keykey_t key ftok(./, 66);//创建共享内存返回一个idint shmid shmget(key, 8, IPC_CREAT|0666|IPC_EXCL);if(-1 shmid){perror(shmget failed);exit(1);}//映射共享内存得到虚拟地址void *p shmat(shmid, 0, 0);if((void*)-1 p){perror(shmat failed);exit(2);}//写共享内存int *pp p;*pp 0x12345678;*(pp 1) 0xffffffff;//解除映射if(-1 shmdt(p)){perror(shmdt failed);exit(3);}printf(解除映射成功点击回车销毁共享内存\n);getchar();//销毁共享内存if(-1 shmctl(shmid, IPC_RMID, NULL)){perror(shmctl failed);exit(4);}return 0;}进程B//readshm.c#include#include#include#include#include#includeintmain(){//生成一个keykey_t key ftok(./, 66);//获取共享内存返回一个idint shmid shmget(key, 0, 0);if(-1 shmid){perror(shmget failed);exit(1);}//映射共享内存得到虚拟地址void *p shmat(shmid, 0, 0);if((void*)-1 p){perror(shmat failed);exit(2);}//读共享内存int x *(int *)p;int y *((int *)p 1);printf(从共享内存中都取了0x%x 和 0x%x \n, x, y);//解除映射if(-1 shmdt(p)){perror(shmdt failed);exit(3);}return 0;}运行结果writeshmareadshma