开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:Shmat 共享内存映射数】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/11053
Shmat 共享内存映射
内容介绍:
一、共享内存映射( attach )
二、实例
一、 共享内存映射( attach )
1.格式
#include <sys/types.h>
#include <sys/ shm. h>
void *shmat(int shmid,const void *shmaddr, int shmflg);
2.功能:
将一个共享内存段映射到调用进程的数据段中。
3.参数:
shmid:共享内存标识符。
shmasdt:共享内存映射地址(若为 NULL 则由系统自动指定),推荐使用 NULL
shuflg:共享内存段的访问权限和映射条件
0:共享内存具有可读可写权限。
SHM_RDONLY:只读。
SHM_RND:( shmaddr 非空时才有效)
没有指定SHM_RND 则此段连接到 shmaddr 所指定的地址上( shmaddr 必需页对齐)。
指定了 SHM_RND 则此段连接到
shmaddr- shmaddr%SHMLBA 所表示的地址上。
4.注意:
shmat 函数使用的时候第二个和第三个参数一般设为 NULL 和0,即系统自动指定共享内存地址,并且共享内存可读可写。
二、实例
//此处说明原理不做判断程序是否成功,但在项目中必须做判断
key_t key;
//定义一个变量 key
int shm_id;
//定义一个 id
char *str;
//定义一个指针用于映射
key=ftok(“.”,2);
//传入参数
shm_id=shmget(key,100,IPC_CREAT|0666);
//100为共享内存块的大小
str = (char *)shmat(shm.id,NULL,0);
//如果成功则返回虚拟地址