1.共享内存段的基本概念
共享内存就是由几个进程共享一段内存区域,可以说是IPC最快形式,因为它无须任何中间操作,它只是把内存段直接映射到调用进程的地址空间中。共享内存段通信的使用方式和消息通信是类似的。首先用shmget系统调用为进程创建一个共享内存段,当需要该共享内存时,利用系统调用shmat将申请的共享内存段映射到进程的私有空间中,之后进程可以用与访问其他虚拟地址空间相同的方法对它进行访问了。多个进程对同一个共享内存访问是互斥的,但互斥控制要与共享内存相关联的所有进程自己去完成。所以共享内存经常和信号量使用。
2.共享内存的系统操作
A.创建一段共享内存系统调用语法:#include
int shmget(key_t key,int size,int flags);
key 共享内存的键值,可以为IPC_PRIVATE,也可以用整数指定一个
size 共享内存字节长度
flags 共享内存权限位。
shmget 调用成功后,如果key 用新整数指定,且flags 中设置了IPC_CREAT
位,则返回一个新建立的共享内存段标识符。如果指定的key 已存在则返回与key
关联的标识符。不成功返回-1
B.令一段共享内存附加到调用进程中的系统调用语法:
#include
char *shmat(int shmid, char *shmaddr,int flags)
shmid 由 shmget 创建的共享内存的标识符
shmaddr 总为0,表示用调用者指定的指针指向共享段
flags 共享内存权限位
shmat 调用成功后返回附加的共享内存首地址
C.令一段共享内存从到调用进程中分离出去的系统调用语法:</