1. 共享内存特点
1)共享内存是一种最为高效的进程间通信方式,进程可以直接解读写内存,而不需要任何数据的拷贝。
2)为了在多个进程间交换信息,内核专门留出了一块内存,可以由需要访问的进程将其映射到自己的私有地址空间。
3)进程可以直接读写这一块内存而不需要进行数据的拷贝。
4)由于多个进程共享一段内存,因此需要依靠某种同步机制,如互斥锁和信号量等。
2. 共享内存实现
1)创建/打开共享内存
2)映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问
3)撤销共享内存映射
4)删除内存对象
3. 共享内存实现函数
使用共享内存编程通常需要调用shmget()、shmat()、shmdt()和shmctl()几个函数。
1)创建共享内存
函数shmget()
头文件:#include<sys/ipc.h>
#include<sys/shm.h>
函数原型:int shmget(key_t key, size_t size, intshmflg)
函数参数:key 共享内存的键值,其他进程通过该值访问该共享内存,其中有个特殊值IPC_PRIVATE,表示创建当前进程的私有共享内存
size 申请的共享内存段的大小
shmflg 同open()函数的第三个参数,为共享内存设定权限,通常使用八进制表示。
函数返回值:成功:共享内存段的标识符(非负整数)
失败:-1
2)映射共享内存
函数shmat()
头文件:#include<sys/types.h>
#include<sys/shm.h>
函数原型:void *shmat(int shmid, const void*shmaddr, int shmflg)
函数参数:shmid 要映