前言
进程间IPC通信的三大主题,消息队列,信号量,共享内存,我们接下来说一说共享内存,共享内存可以提供给服务器进程和客户进程之间进行通信,不需要进行数据的复制,所以速度最快,只需要让两个进程通过页表映射到同一块物理内存即可,这样,这块物理内存是两个进程都能看到的,这样当一个进程进行写操作,另外的一个进程也就可以做读操作。所以问题关键也就是给出一个特定的存储区。通常情况下,我们需要确保一个进程在写的时候,另外一个进程不能去读,所以我们可以使用信号量进行共享内存访问。
创建共享内存
首先我们利用ftok函数生成key标识。
key_t ftok(const char *pathname, int proj_id);
然后我们使用shmget函数,这个函数可以进行创建共享内存。
int shmget(key_t key, size_t size, int shmflg);
在这你要看好,这个size是需要进行申请的共享内存的大小,需要注意的是,操作系统为你提供的时候是按照页来提供的,因为是按照页提供的,所以size为4k的整数倍,然后shmflg和信号量以及消息队列的类似,如果要创建新的共享内存,那么就是使用IPC_CREATE,IPC_EXCL。如果是已存在的,那么只需要使用IPC_CREATE或者传0。
挂接共享内存
创建好共享的内存以后,这个时候我们就应该考虑的是让进程去挂接共享内存。
v