我正在使用 ftok/shmget/shmat/shmdt 函数在 Linux 上创建、写入和读取共享段。
如果我在一个程序中写入该段然后退出,随后从另一个程序中读取该段,我会惊讶地发现数据仍然存在。
我原以为当共享一个段的最后一个进程执行 shmdt 时,该段将被释放。
我可以依赖这种行为吗?还是类似于在 free() 之后继续使用指针?
最佳答案
共享内存区域将一直保留,直到通过 shmctl(shmid,IPC_RMID,...)
[或系统重启] 将其删除。这将在每个进程完成 shmdt
[或终止] 后生效。
语义与文件非常相似。 shmat
类似于open
。 shmdt
类似于 close
而 [above] shmctl
类似于 unlink
。
如果您关闭一个文件,您希望它一直存在直到被特别删除,不是吗?因此,共享内存段的操作类似
关于c++ - Linux 上共享内存的生命周期是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35666526/