shmdt 标记为删除,c,linux
shmdt marked for deletion, c, linux
我正在尝试用 c 语言编写一些代码来处理 linux 中的剪切内存,
而且我不确定何时使用系统调用 shmdt
,
以及何时使用 shmctl (segment_id, IPC_RMID, 0);
我看了看shmdt的man page,读到这句话:
"shm_nattch 减一。
如果它变为 0 并且该段被标记为删除,
该段已删除。"
手册页提到的标记是什么?是 shmctl (segment_id, IPC_RMID, 0);
吗?
并且意味着 shmctl (segment_id, IPC_RMID, 0);
如果有一个进程仍处于连接状态,则不会分离该段?
如果有人能解释每次调用的作用,我将不胜感激。
谢谢
shmdt()
反转 shmat()
-操作。
shmat: 映射进程地址中的共享内存段space
shmdt: 再次取消映射
shmctl (segment_id, IPC_RMID, 0);
标记要删除的段,也就是说,它是shmget(..., IPC_CREAT)
创建共享内存段的反操作。如果删除时引用计数器为0,则立即删除该段。否则,删除会延迟到最后一个进程取消映射(显式使用 shmdt()
或隐式终止)。
从进程地址取消共享内存映射 space 使用系统调用
shmdt(shared memory start virtual address)
但要删除共享内存段,请使用 shmctl()
和 IPC_RMID
或 ipcs
命令。
共享内存段数据结构在 Linux 内核中维护,因此删除共享内存段意味着从内核中删除或释放数据结构。
我正在尝试用 c 语言编写一些代码来处理 linux 中的剪切内存,
而且我不确定何时使用系统调用 shmdt
,
以及何时使用 shmctl (segment_id, IPC_RMID, 0);
我看了看shmdt的man page,读到这句话: "shm_nattch 减一。 如果它变为 0 并且该段被标记为删除, 该段已删除。"
手册页提到的标记是什么?是 shmctl (segment_id, IPC_RMID, 0);
吗?
并且意味着 shmctl (segment_id, IPC_RMID, 0);
如果有一个进程仍处于连接状态,则不会分离该段?
如果有人能解释每次调用的作用,我将不胜感激。 谢谢
shmdt()
反转 shmat()
-操作。
shmat: 映射进程地址中的共享内存段space
shmdt: 再次取消映射
shmctl (segment_id, IPC_RMID, 0);
标记要删除的段,也就是说,它是shmget(..., IPC_CREAT)
创建共享内存段的反操作。如果删除时引用计数器为0,则立即删除该段。否则,删除会延迟到最后一个进程取消映射(显式使用 shmdt()
或隐式终止)。
从进程地址取消共享内存映射 space 使用系统调用
shmdt(shared memory start virtual address)
但要删除共享内存段,请使用 shmctl()
和 IPC_RMID
或 ipcs
命令。
共享内存段数据结构在 Linux 内核中维护,因此删除共享内存段意味着从内核中删除或释放数据结构。