我使用ftok/shmget/shmat/shmdt函数创建、写入和读取Linux上的共享段。
如果我写到一个程序中的段,然后退出,然后再从另一个程序中读取该段,我会惊讶地发现数据仍然存在。
我原以为,当最后一个共享一个段的进程做了一个shmdt时,这个段将是免费的。
我能依靠这种行为吗?还是类似于在空闲()之后继续使用指针?
发布于 2016-02-27 06:53:15
共享内存区域一直保持到通过shmctl(shmid,IPC_RMID,...)或系统重新启动删除为止。这将在每个进程完成shmdt或终止后生效。
语义与文件非常相似。shmat就像open。shmdt类似于close,而上面的shmctl类似于unlink。
如果您关闭一个文件,您会希望它坚持到具体删除,不是吗?因此,共享内存段的操作类似。
发布于 2016-02-27 06:46:28
shmdt只分离内存,不对数据段执行擦除/覆盖操作。直到其他进程映射并再次使用它,数据才会持续。
此外,您应该使用更新的、符合POSIX标准的mmap。
https://stackoverflow.com/questions/35666526
复制相似问题