前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UNPv2第十四章:System V共享内存区

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

作者头像
提莫队长
发布2019-02-21 11:09:01
3890
发布2019-02-21 11:09:01
举报
文章被收录于专栏:刘晓杰刘晓杰

1 shmget函数

代码语言:javascript
复制
#include <sys/shm.h>
int shmget(key_t key, size_t size, int oflag)
返回一个共享区标识符

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

2 shmat函数

代码语言:javascript
复制
#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函数

代码语言:javascript
复制
#include <sys/shm.h>
int shmdt(const void *shmaddr);
        断开共享内存连接

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

代码语言:javascript
复制
#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自行查阅

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年04月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 shmget函数
  • 2 shmat函数
  • 3 shmdt函数
  • 4 shmctl函数(完成对共享内存的控制)
  • 5 共享内存区的限制
  • 6 小结
  • 后记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档