共享内存
共享内存区是最快的IPC形式,一旦这样的内存映射到共享它的进程地址空间,这些进程间数据传递不再涉及内核,也就是说进程不再通过执行进入内核的系统调用来传递彼此的数据。
共享内存的优点:
共享内存是进程间通信最快的,可以减少拷贝次数。共享内存不提供任何互斥和同步机制,必须由用户自己完成。
注意:
共享内存的创建是以页为单位的
systemV IPC(共享内存)资源的生命周期随内核
共享内存函数:
shmget函数
功能:创建共享内存
原型:
int shmget(key_t key, size_t size, int shmflg);
参数:
key:该共享内存段的名字(标识内存段,类似于文件标识符inode)
size:共享内存大小
shmget:由九个权限标志构成,它们的用法和创建文件时使用的mode模式标志是一样的
返回值:成功返回非负整数,即该共享内存段的标识码;失败返回-1。
shmat函数
功能:将共享内存段连接到进程地址空间
原型:
void *shmat(int shmid, const void *shmaddr, int shmflg);
参数:
shmid:共享内存标识
shmaddr:指定连接的地址
shmflg:它的两个可能取值是SHM_RND和SHM_RDONLY
返回值:成功返回一个指针,指向共享内存第一个