1. 查看系统中的共享存储段
ipcs -m
2. 删除系统中的共享存储段
ipcrm -m [shmid]
3.shmget ( ): 创建共享内存
int shmget(key_t key, size_t size, int shmflg);
[参数 key]: 由 ftok 生成的 key 标识, 标识系统的唯一 IPC 资源.
[参数 size]: 需要申请共享内存的大小. 在操作系统中, 申请内存的最小单位为页, 一页是 4k 字节, 为了避免内存碎片, 我们一般申请的内存大小为页的整数倍.
[参数 shmflg]: 如果要创建新的共享内存, 需要使用 IPC_CREAT,IPC_EXCL, 如果是已经存在的, 可以使用 IPC_CREAT 或直接传 0.
[返回值]: 成功时返回一个新建或已经存在的的共享内存标识符, 取决于 shmflg 的参数. 失败返回 - 1 并设置错误码.
4.shmat ( ): 挂接共享内存
void *shmat(int shmid, const void *shmaddr, int shmflg);
[参数 shmid]: 共享存储段的标识符.
[参数 * shmaddr]:shmaddr = 0, 则存储段连接到由内核选择的第一个可以地址上 (推荐使用).
[参数 shmflg]: 若指定了 SHM_RDONLY 位, 则以只读方式连接此段, 否则以读写方式连接此段.
[返回值]: 成功返回共享存储段的指针 (虚拟地址), 并且内核将使其与该共享存储段相关的 shmid_ds 结构中的 shm_nattch 计数器加 1(类似于引用计数); 出错返回 - 1.
5.shmdt ( ): 去关联共享内存
当一个进程不需要共享内存的时候, 就需要去关联. 该函数并不删除所指定的共享内存区, 而是将之前用 shmat 函数连接好的共享内存区脱离目前的进程.
int shmdt(const void *shmaddr);
[参数 * shmaddr]: 连接以后返回的地址.
[返回值]: 成功返回 0, 并将 shmid_ds 结构体中的 shm_nattch 计数器减 1; 出错返回 - 1.
6.shmctl ( ): 销毁共享内存
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
[参数 shmid]: 共享存储段标识符.
[参数 cmd]: 指定的执行操作, 设置为 IPC_RMID 时表示可以删除共享内存.
[参数 * buf]: 设置为 NULL 即可.
[返回值]: 成功返回 0, 失败返回 - 1.
---------------------
作者: YPT_victory
- https://blog.csdn.net/ypt523/article/details/79958188
- https://www.cnblogs.com/LUO77/p/5816326.html
来源: http://www.bubuko.com/infodetail-3113388.html