shmdt标记为删除,c,linux

时间:2016-01-25 12:41:10

标签: c linux shared-memory

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

我查看了shmdt的手册页,并阅读了这句话: “shm_nattch减1。 如果它变为0并且该段被标记为删除, 该段被删除。“

手册页提到的标记是什么?是shmctl (segment_id, IPC_RMID, 0);吗? 和剂量是否表示如果某个流程仍然连接,shmctl (segment_id, IPC_RMID, 0);将不会分离该段?

如果有人能解释每次通话的剂量,我将不胜感激。 感谢

2 个答案:

答案 0 :(得分:3)

shmdt()撤销shmat() - 操作。

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

shmdt:再取消映射

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

答案 1 :(得分:0)

从进程地址空间使用系统调用取消映射共享内存映射 shmdt(shared memory start virtual address)但要删除共享内存段,请使用shmctl()IPC_RMID命令{。}}。 共享内存段数据结构在Linux内核中维护,因此删除共享内存段意味着从内核中删除或释放数据结构。