我正在尝试用 c 语言编写一些代码来处理 linux 中的剪切内存,
而且我不确定何时使用系统调用 shmdt
,
以及何时使用 shmctl (segment_id, IPC_RMID, 0);
我查看了 shmdt 的手册页,读到这句话: “shm_nattch 减一。 如果它变为 0 并且该段被标记为删除, 该段已删除。”
手册页提到的标记是什么?是 shmctl (segment_id, IPC_RMID, 0);
吗?
并且这意味着 shmctl (segment_id, IPC_RMID, 0);
如果有一个进程仍然连接,将不会分离该段?
如果有人能解释每次调用的作用,我将不胜感激。 谢谢
最佳答案
shmdt()
反转 shmat()
操作。
shmat:映射进程地址空间中的共享内存段
shmdt:再次取消映射
shmctl (segment_id, IPC_RMID, 0);
标记要删除的段,这意味着,它是用 shmget(..., IPC_CREAT) 创建共享内存段的反操作
。如果删除时引用计数器为0,则立即删除该段。否则,删除会延迟到最后一个进程取消映射(显式使用 shmdt()
或隐式终止)。
关于c - shmdt 标记为删除,c,linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34992888/