首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标记为删除、c、linux的shmdt

标记为删除、c、linux的shmdt
EN

Stack Overflow用户
提问于 2016-01-25 12:41:09
回答 2查看 479关注 0票数 2

我试图在linux中用c++编写一些处理剪切内存的代码,我不确定何时使用系统调用shmdt,何时使用shmctl (segment_id, IPC_RMID, 0);

我看了一下shmdt的手册页,读到这句话:"shm_nattch减少1,如果它变成0,段被标记为删除,则段被删除。“

手册上提到的标记是什么?是shmctl (segment_id, IPC_RMID, 0);吗?这是否意味着如果还存在一个连接的过程,shmctl (segment_id, IPC_RMID, 0);就不会分离这个部分?

如果有人能解释一下每个电话是干什么的,我会很感激的。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-25 13:02:36

shmdt()逆转shmat()-operation。

shmat:映射进程地址空间中的共享内存段

shmdt:再次取消映射

shmctl (segment_id, IPC_RMID, 0);标记删除段,这意味着它是使用shmget(..., IPC_CREAT)创建共享内存段的反操作。如果删除时引用计数器为0,则将立即删除该段。否则,删除将推迟到最后一个进程取消它(显式地使用shmdt()或通过终止隐式)。

票数 3
EN

Stack Overflow用户

发布于 2016-01-27 12:04:36

要解除进程地址空间中的共享内存映射,请使用系统调用shmdt(shared memory start virtual address),但要删除共享内存段,请使用shmctl()IPC_RMIDipcs命令。

共享内存段数据结构是在Linux内核内部维护的,因此删除共享内存段意味着从内核中删除或释放数据结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34992888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档