我使用ftok / shmget / shmat / shmdt函数创build,写入和读取Linux上的共享段。
如果我在一个程序中写入段然后退出,然后从另一个程序中读取段,我惊讶地发现数据仍在那里。
我会预料到,当共享一个细分市场的最后一个stream程做了一个shmdt的时候,这个细分市场就会被释放。
我可以依靠这种行为吗? 还是类似于在free()之后继续使用指针?
共享内存区域一直保留,直到通过shmctl(shmid,IPC_RMID,...)
[或系统重启]删除。 这将在每个进程完成shmdt
[或终止]后生效。
语义与文件非常相似。 shmat
就像open
一样。 shmdt
就像close
,[上述] shmctl
就像unlink
。
如果你关闭了一个文件,你会希望这个文件一直存在直到被删除,不是吗? 所以,共享内存段的运作方式相似
shmdt
只分离你的内存,在数据段上不执行擦除/覆盖。 直到其他进程映射并再次使用它,数据将会持续。
另外,你应该使用更新的POSIX兼容的mmap
。