c++ - Linux 上共享内存的生命周期是多少

标签 c++ c linux shared-memory

我正在使用 ftok/shmget/shmat/shmdt 函数在 Linux 上创建、写入和读取共享段。

如果我在一个程序中写入该段然后退出,随后从另一个程序中读取该段,我会惊讶地发现数据仍然存在。

我原以为当共享一个段的最后一个进程执行 shmdt 时,该段将被释放。

我可以依赖这种行为吗?还是类似于在 free() 之后继续使用指针?

最佳答案

共享内存区域将一直保留,直到通过 shmctl(shmid,IPC_RMID,...) [或系统重启] 将其删除。这将在每个进程完成 shmdt [或终止] 后生效。

语义与文件非常相似。 shmat 类似于openshmdt 类似于 close 而 [above] shmctl 类似于 unlink

如果您关闭一个文件,您希望它一直存在直到被特别删除,不是吗?因此,共享内存段的操作类似

关于c++ - Linux 上共享内存的生命周期是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35666526/

相关文章:

c++ - std::ostringstream 和 flush 成员函数

c++ - 类定义中的宏相关访问说明符是否会导致未定义的行为?

c - 如何从 C 程序调用 unix 命令

c - 为什么 gdb "set"命令不能识别全局变量,必须添加 "::"或 "variable"?

linux - Qt 小部件大小错误 + 小部件更新问题

linux - debian 服务器上的关机监视器

c++ - qt designer 的自定义小部件插件是不可见的

c++ - 由于没有运算符的 CString 连接(?)导致的 MemoryException

c - c中二维数组的重新分配

linux - 使用 dd 转储映射缓冲区