原文链接:C++ Linux IPC进程通信-共享内存
共享内存<sys/shm.h>
库函数
int shmget(key_t key, size_t size, int shmflg);
return 共享内存的ID(成功) -1(错误)
key为一个标记内存的关键字,可用自己指定,也可以用ftok函数转文件名为key,
shmflg标志包括IPC_CREAT(创建)|IPC_EXCL(存在则报错)|SHM_RDONLY(只读)|SHM_RND(附加到指定地址的最接近的可用地址)|SHM_NORESERVE(不预留共享内存资源)
!!:注意IPC命名对象需要指定该对象的文件权限如IPC_CREAT|0666
void *shmat(int shm_id, const void *shm_addr, int shmflg);
return 分配空间首地址 或 -1
shm_id为返回的id shm_addr为nullptr自动分配,否则就近分配 shmflg可为SHM_RDONLY(只读)|SHM_NORESERVE(不预留共享内存资源)
int shmdt(const void *shmaddr); shmaddr为首地址
return 成功0,出错-1
int shmctl(int shm_id, int cmd, struct shmid_ds *buf);
return 成功0,出错-1
cmd:IPC_STAT(读出数据到buf),IPC_SET(写入),IPC_RMID(删除共享内存)
该控制命令实际上就是通过更新结构体来控制共享内存配置