Linux上共享内存的生命周期是多less?

我使用ftok / shmget / shmat / shmdt函数创build,写入和读取Linux上的共享段。

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

我会预料到,当共享一个细分市场的最后一个stream程做了一个shmdt的时候,这个细分市场就会被释放。

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

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

语义与文件非常相似。 shmat就像open一样。 shmdt就像close ,[上述] shmctl就像unlink

如果你关闭了一个文件,你会希望这个文件一直存在直到被删除,不是吗? 所以,共享内存段的运作方式相似

shmdt只分离你的内存,在数据段上不执行擦除/覆盖。 直到其他进程映射并再次使用它,数据将会持续。

另外,你应该使用更新的POSIX兼容的mmap