本文主要是介绍linux高级学习9,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
24.9.6学习目录
- 一.共享内存
- 1.共享内存的API
一.共享内存
特点:
- 其在进程间共享数据的方法中是最快的
- 要注意对给定存储区访问时进行互斥
1.共享内存的API
(1)获取共享内存标识符
在shell中使用
ipcs -m进行查看共享内存
ipcrm -m shmid删除共享内存
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key,size_t size,int shmflg);
key:IPC键值
size:共享内存的大小
shmflg:标识函数行为及共享内存的权限
IPC_CREAT:如果不存在就创建
IPC_EXCL:如果已经存在则返回失败
位或权限位:共享内存位或权限位后可以设置共享内存的访问权限。
(2)虚拟内存和物理内存的映射
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid,const void *shmaddr,int shmflg);
shmid:共享内存标识符
shmaddr:共享内存映射地址,推荐位NULL
shmflg:共享内存段的访问权限和映射条件
0:共享内存具有可读可写权限
SHM_RDONLY:只读
SHM_RND:只有当shmaddr非空才有效;
(3)解除当前进程的映射关系
#include <sys/types.h>
#include <sys/shm.h>
//将共享内存映射地址添加到其中进行解除
int shmdt(const void *shmaddr);
(4)共享内存控制
#include <sys/types.h>
#include <sys/shm.h>
int shmctl(int shmid,int cmd,struct shmid_ds *buf);
shmid:共享内存标识符
cmd:函数功能的控制
IPC_RMID:删除
IPC_SET:设置shmid_ds参数
IPC_STAT:保存shmid_ds参数
SHM_LOCK:锁定共享内存段
SHM_UNLOCK:解锁共享内存段
这篇关于linux高级学习9的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!