本文主要是介绍c++ linux——进程共享内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
共享内存概念:
每个进程的虚拟内存对应一块物理地址,如果两个进程需要共享某一块内存,则各自的虚拟内存会有一小块映射到同一片物理地址上。是最高效的进程间通信方式。
关键就是四个函数
shmget(创建或者获取现有的共享内存标识符)
shmat (将共享内存挂接到当前进程)
shmdt(共享内存与当前进程取消挂接)
shctrl(删除共享内存或者改变权限)
举例实现:
进程1
#include<sys/ipc.h>
#include<sys/shm.h>
int main()
{key_t key = ftok("pr1",0x6666);//获得一个共享内存的标识符if(key<0){return -1;}int shmid = shmget(key,4096,IPC_CREAT|IPC_EXCL);//创建一块共享内存,如果已经存在就返回共享内存的标识符char* addr = (char*)shmat(shmid,NULL,0);//将共享内存与当前进程挂接int i=0;while(i++<15){printf("client: %s\n",addr);sleep(1);}shmdt(addr);//将共享内存与当前进程取消挂接sleep(1);shmctrl(shmid,IPC_RMID,NULL);//销毁共享内存return 0;
}
进程2
#include<sys/ipc.h>
#include<sys/shm.h>
int main()
{key_t key = ftok("pr1",0x6666);//获得一个共享内存的标识符if(key<0){return -1;}int shmid = shmget(key,0,IPC_CREAT);//获取共享内存char* addr = (char*)shmat(shmid,NULL,0);//将共享内存与当前进程挂接int i=0;while(i++<15){addr[i]='A';sleep(1);}shmdt(addr);//将共享内存与当前进程取消挂接return 0;
}
查询linux下共享内存的信息
ipcs -m | grep root
这篇关于c++ linux——进程共享内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!