UNPv2第十四章:System V共享内存区

1 shmget函数

#include <sys/shm.h>
int shmget(key_t key, size_t size, int oflag)
返回一个共享区标识符

Key既可以是ftok返回值,也可以是IPC_PRIVATE Size以字节为单位指定内存区大小

2 shmat函数

#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int flag)

连接共享内存标识符为shmid的共享内存,连接成功后把共享内存区对象映射到调用进程的地址空间,随后可像本地空间一样访问  如果shmaddr是一个空指针,那么系统调用者选择地址  如果shmaddr是一个非空指针,那么返回地址取决于调用者是否给flag指定SHD_RND:  如果SHD_RND没有指定,那么相应的共享内存区附接到由shmaddr参数指定的地址  如果SHD_RND指定了,那么相应的共享内存区附接到shmaddr参数指定的地址向下舍入一个SHMLBA常值(LBA:低端边界地址)

3 shmdt函数

#include <sys/shm.h>
int shmdt(const void *shmaddr);
        断开共享内存连接

4 shmctl函数(完成对共享内存的控制)

#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

cmd有如下取值:  IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中  IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内  IPC_RMID:删除这片共享内存

5 共享内存区的限制

6 小结

System V共享内存区最新常用的函数调用是:  shmget获取一个标识符  shmat把一个共享内存区附接到调用进程的地址空间  以一个IPC_STAT命令调用shmctl:获取一个已存在共享内存区的大小  以一个IPC_RMID命令调用shmctl:删除一个共享内存区对象

后记

APUE,UNPv1,UNPv2已经看完了,一些基本的操作还是能看懂的。由于UNP两本书上的有些代码在APUE中已经贴出来了,所以就没有再次粘贴,所以UNP两本书的学习笔记只有一些概念性的介绍,没有代码。有兴趣可以自己买本书或者下载pdf自行查阅

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券