共享内存是基于虚拟内存的机制,在进程的地址空间中,共享区域的虚拟页通过内核中的页表映射到实际的物理页中,当多个进程都映射到同一块物理页,那么它们访问的就是同一片物理内存,即共享内存。
此时基于同一片内存,进程间进行信息传输的速度将非常快,每个进程相当于访问自己地址空间内的内存数据。
关键函数:
key_t ftok(const char* pathname,int proj_id)
该函数通过将一个Linux目录名和一个项目ID生成唯一的一个IPC键值。目录必须存在,并且目录不变时,不同进程之间生成的IPC键值是不变的,由此不同进程基于该函数获得对IPC资源的访问指针。
int shmget(key_t key,size_t size,int shmflg)
- key:该函数传入所要访问IPC资源的key ,
- size:指定申请的共享内存大小(Linux中页的大小通常为4k :4096个字节 整数倍的申请可提高存取效率)
- shmflg:创建IPC资源为IPC_CRETE
- 返回值:若创建成功或者已有该IPC资源 返回一个IPC资源标识符(该标识符每个进程不同,仅仅在本进程中使用)
void* shmat(int shmid,const void* shmaddr,int shmflg)
- shmid:即通过shmget返回的共享内存id
- shmaddr:=0 则默认由内核挂载到共享内存的第一个可用位置上 <