[英]What is the lifetime of shared memory on Linux
我使用ftok / shmget / shmat / shmdt函数在Linux上创建,写入和读取共享段。
如果我在一个程序中写入段然后退出,随后从另一个程序中读取该段,我很惊讶地发现数据仍在那里。
我原本预计,当共享一个段的最后一个进程执行shmdt时,该段将是空闲的。
我可以依靠这种行为吗? 或者它类似于在free()之后继续使用指针?
共享内存区域保持不变,直到通过shmctl(shmid,IPC_RMID,...)
[或系统重启]删除它。 这将在每个进程完成shmdt
[或终止]后生效。
语义与文件非常相似。 shmat
就像open
一样。 shmdt
就像close
,[上面] shmctl
就像unlink
。
如果你关闭一个文件,你会希望它一直存在,直到被特别删除,不是吗? 因此,共享内存段的运行方式类似
shmdt
只会分离内存,不会对数据段执行擦除/覆盖。 在某些其他流程映射并再次使用它之前,数据将持续存在。
此外,您应该使用更新的,符合POSIX标准的mmap
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.