Shmctl 共享内存控制|学习笔记

简介: 快速学习 Shmctl 共享内存控制

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频Shmctl 共享内存控制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11055


Shmctl 共享内存控制

 

内容介绍:

一、共享内存控制

二、实例

 

一、共享内存控制

1.格式

#include <sys/ipc.h>

#include <sys/shm. h>

int shmctl(int shmid, int cmd,struct shmid_ds *buf);

2.功能:

共享内存空间的控制。

3.参数:

(1)shmid:共享内存标识符。

(2)buf:  shmid ds 数据类型的地址,用来存放或修改共享内存的属性。

(3)cmd:函数功能的控制

IPC_RMID:删除。

IPC_SET:设置 shmid _ds 参数。IPC_STAT:保存 shmid_ds 参数。

SHM_LOCK:锁定共享内存段(超级用户)。

在物理内存中开辟了一块内存,如果某一块内存块长期不使用,这一块共享内存块会备份在磁盘上,这块共享内存可以重复利用,当用到这块内存块时,会被找回,这样可以提高物理内存的使用率.

SHM_UNLOCK:解锁共享内存段。

一旦被 LOCK ,不会被磁盘备份然后被重复利用,一直占用物理内存,直到删除或重启系统该共享内存块才会消失.

4.返回值:

成功返回0,失败返回-1。

5.注意:

共享内存块不会因为程序结束而消失

 

二、实例

key_ t key;  //定义一个变量 key

int shm_id;  //定义一个 id

char *str;     //定义一个指针用于映射

int ret;

key=ftok(“.”,2);  //传入参数

shm_id=shmget(key,100,IPC_CREAT|0666);

//100为共享内存块的大小

str = (char *)shmat(shm.id,NULL,0);

ret = shmdt(str);  

//解除映射关系,一旦解除就不能通过指针去访问共享内存

shmctl(shm_id,IPC_RMTD,NULL);

//将共享内存块删除(保证不再使用该共享内存块)

如果想保存内存块的属性:

shmctl(shm_id,IPC_RMTD,NULL);

改为:

shmctl(shm_id,IPC_RMID,&tmp);

想设置共享内存块的属性:

则改为:

shmctl(shm_id,IPC_&SET,&tmp);

相关文章
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
【深入理解计算机系统】int 不是整数 | float 不是实数 | 内存引用错误的例子 | 学习笔记
282 0
|
存储 编译器 C语言
【C++】学习笔记——内存管理
【C++】学习笔记——内存管理
153 15
|
存储 缓存 Linux
计算机操作系统学习笔记(5)——内存管理
计算机操作系统学习笔记(5)——内存管理
212 0
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
179 0
|
存储 C++
C primer plus 学习笔记 第12章 存储类别、链接和内存管理
C primer plus 学习笔记 第12章 存储类别、链接和内存管理
136 2
|
存储 缓存 算法
十五、Linux性能优化实战学习笔记 - Linux内存是怎么工作的
内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应用程序的指令、数据、缓存等
501 1
|
NoSQL Redis
Redis学习笔记-内存碎片对性能的影响
Redis学习笔记-内存碎片对性能的影响
232 0
|
存储 并行计算 测试技术
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)
347 0
【CUDA学习笔记】第五篇:内存以及案例解释(附案例代码下载方式)(二)
java202302java学习笔记第十天-数组的内存图1
java202302java学习笔记第十天-数组的内存图1
198 0
java202302java学习笔记第十天-数组的内存图1
java202302java学习笔记第六天-创建内存对象分析
java202302java学习笔记第六天-创建内存对象分析
217 0
java202302java学习笔记第六天-创建内存对象分析