
Linux 使用IPC机制来达到信息之间的共享和传递
查看IPC信息的命令:
查看IPC限制信息的命令:
这里只能查看,具体信息的修改可以修改/proc/sys/kernel的相关参数,一般系统至少有如下3个参数: 共享内存的删除(释放)命令:
下载我们视频中代码和相关讲义,请在公众号回复:计算机视觉课程资料
发布日期:2021-05-09 12:08:01
浏览次数:3
分类:技术文章
本文共 1567 字,大约阅读时间需要 5 分钟。
C/C++程序很多时候需要使用IPC机制来达到信息之间的共享和传递,这里简单介绍一下比较常用的一张IPC方式---共享内存,它的基本信息查看、限制信息查看、删除的基本命令。
查看IPC信息的命令:ipcs [-a][-m|-q|-s]
-
ipcs -m
:输出所有共享内存(share memory)信息

共享内存输出.png
上述各项含义如下:
-
key
:表示共享内存的key -
shmid
:表示共享内存编号 -
owner
:表示创建共享内存的用户 -
perms
:表示共享内存的的使用权限 -
bytes
:表示共享内存的大小 -
nattch
:表示连接到共享内存的的进程数 -
status
:表示共享的状态(不显示则为正常使用,显示“dest”表示已被标记,但并未真正删除,详情参见备注)
说明:
这里的通过ipcs -m
查看到的结果中key为16进制,可能会存在你的key代码中key是10进制,如果没有经过转换是无法直接查询的。将10进制转化一下即可

image.png
备注:“dest”状态说明
【引用计数】Linux下任何内容的删除操作,都会将该内容引用计数减1,最终内容是否被真正删除取决于引用计数是否为0。当用户有权限且执行删除操作时,大致流程如下:
1、内容引用计数减1
去除自己占用的计数 2、待引用计数降为0,删除该内容
2.1、若引用计数为0,删除该内容 2.2、若引用计数不为0,已占用的程序仍可继续使用,但内容被设置成私有,屏蔽外部新的引用。当程序主动删除或程序退出后系统会对该内容进行回收,这将导致引用计数的下降。待引用计数降为0后,系统会将该内容真正意义上的删除掉。
【共享内存情况】对这里用共享内存来说同理,当用户调用删除某个共享内存时,此时大致流程如下:
1、共享内存引用计数减1
去除自己占用的计数 2、待引用计数降为0,释放该共享内存
2.1、若引用计数为0,直接释放该段内存 2.2、若引用计数不为0,已占用的程序仍可继续使用,但共享内存被设置成私有,屏蔽外部新的引用。具体操作如下: 1)将共享内存的mode
标记为SHM_DEST
,标明状态 2)将共享内存的key
标记为IPC_PRIVATE(即0x00000000)
3)将共享内存的statu
s标记为dest

dest态的共享内存.png
查看IPC限制信息的命令:ipcs -l
-
ipcs -lm
:输出共享内存(share memory)控制信息

IPC限制信息查看.png
shmall
可用共享内存的总数量(字节或者页面) shmmax
最大共享内存段尺寸(字节) shmmni
最大共享内存段尺寸(字节) 共享内存的删除(释放)命令:ipcrm -m shm_id
如果你只知道共享内存key想删除共享内存,可以使用ipcrm [-M key | -m id]
说明:消息队列、信号量的用法与共享内存相似,只是参数不同而已
ipcs [-m|-q|-s]
-m
输出有关共享内存(shared memory)的信息-q
输出有关信息队列(message queue)的信息-s
输出有关“信号量”(semaphore)的信息ipcrm [ -M key | -m id | -Q key | -q id | -S key | -s id ]
-M
用shmkey
删除共享内存-m
用shmid
删除共享内存-Q
用msgkey
删除消息队列-q
用msgid
删除消息队列-S
用semkey
删除信号灯-s
用semid
删除信号灯
了解更多关于《计算机视觉与图形学》相关知识,请关注公众号:

转载地址:https://blog.csdn.net/CSS360/article/details/88767398 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2023年08月31日 09时22分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python绘图 | 初识Turtle绘图~
2019-03-07
Python爬虫从入门到实战教程
2019-03-07
Python小伎俩之实现群发邮件
2019-03-07
Python网络爬虫(一) | urllib包基本使用教程
2019-03-07
Python开发入门(三) | itchat实现微信机器人
2019-03-07
Python网络爬虫| Requests库的基本使用
2019-03-07
SQL Server | 网上购物商城数据库设计报告(专业课设作品)
2019-03-07
关于面试 | 看看前端面试都问什么~
2019-03-07
重构Java基础 (一) | 说说java中的常量与变量
2019-03-07
重构Java基础 (二) | 浅谈java运算符
2019-03-07
重构Java基础 (三) | 程序控制
2019-03-07
Bootstrap实战 | 用Bootstrap布局写一个完整的商城科技网站页面
2019-03-07
网络技术 | Cisco Packet Tracer 6.2安装包 & 安装教程
2019-03-07
网络技术| 说说计算机网络及IP地址 -- 网络基础& 跳线制作& IP地址配置
2019-03-07
网络技术 | IP地址的作用
2019-03-07
重构Java基础 (四) | 你关心的java面向对象
2019-03-07
Bootstrap4官方文档 | 新特性入门
2019-03-07
线程与线程池笔记(一)线程、同步锁、线程间通信简单使用
2019-03-07
Android的广播接收者
2019-03-07
执行引擎---JVM(十一)
2019-03-07