1.定义和作用:
共享内存是多个进程之间共享的一段内存段。来进行内存中的数据交换。
2.共享内存段对应的struct结构
struct shmid_ds{
struct ipc_perm shm_perm; //权限相关的结构体
int shm_segsz; //内存段的总大小
ushort shm_lkcnt;
pid_t shm_cpid; //创建该内存段的线程
pid_t shm_lpid; //最近使用该内存的线程
ulong shm_nattach; //内存段被附加的总数
time_t shm_atime; //内存段最近被附加的时间
time_t shm_dtime; //内存段最近被脱离的时间·
time_t shm_ctime; //内存段最近被修改的时间
};
- 内存段相关函数
int shmget(key_t key,size,flag);
key:必须是唯一的,可以用ftok生成
size: 内存段的大小
flag:标志
如果内存段已存在,key要和那个已存在的key一致,size一致,flag可以设置成IPC_CREAT 用来打开该内存段。如果不存在,则创建该key对应的size大小的内存段。
当key为IPC_PRIVATE时,总是创建新的内存段。
函数调用成功返回内存段的调用标识,失败返回-1
- 内存端的附加和拆离
int shmat(int shmid,void *addr,flag);
如果addr = 0 程序自动附加该内存段
addr != 0 程序附加到指定内存段
返回一个附加完后,指向内存段的地址。
int shmdt(void *addr);
addr是shmat返回的附加地址,该函数是拆离该内存段
- 共享内存段的控制
int shmctl(int shmid,int cmd,shmid_ds *buf);
下图是cmd取值