什么是共享内存
共享内存 是多个进程都可以共享访问的一段内存区域。通过指针指向这个内存区域,一旦有一个进程把该指针所指向内容修改,其他同指向的进程也会感知到这个改变。
问什么说共享内存是最快的进程间通信方式
因为共享内存是直接将一块内存区域映射到虚拟地址空间中,因此在数据通信传输的过程中,相比较其他的通信方式少了将数据从用户态到内核态的数据拷贝过程。
什么意思,就是说这种通信方式,已经把数据拿到了地址空间,再取数据不需要再涉及到内核,不涉及执行进入内核的系统调用 来传递数据。
共享内存使用步骤
1.创建共享内存
#include<sys/ipc.h>
#include<sys/shm.h>
int shmget(key_t key,size_t size,int shmflg);
//参数:key是共享内存段名字,进程间通信的标识符,和我们消息队列定义的一样。需要自己define 定义
//size 是共享内存的大小
//shmflg是创建权限,共九种,类似于创建文件时的mode权限
//返回值:成功返回一个非负整数是操作句柄,失败返回-1
2.将共享内存映射到虚拟地址空间
#include<sys/types.h>
#include<sys/shm.h>
void * shmat (int shmid, const void * shmaddr, int shmflg);
//参数:shmid 是shmget返回的操作句柄,
//shmaddr 是映射第起始地址,如果参数给NULL则系统分配
//shmflg 是权限只读、只写、读写等,系统给出类一些宏定义,比如SHM_PDONLY 表示只读,无标志标识读写
SHM