我正在使用Ubuntu 12.04服务器上的C开发应用程序的共享内存套件。
这是我第一次尝试处理共享内存,所以我不确定所有的陷阱。
我的套件以一个创建共享内存段的守护进程以及其他一些使用它的应用程序开始。
在开发过程中,当然可以创建段,然后程序崩溃而不删除它。我可以看到它使用ipcs -m
列出。
通常,这不是什么大问题,因为下次我启动“控制”程序时,它只是重用现有的段。
但是,有时段的大小会发生变化,因此程序会失败shmget()
函数。
我的问题......
在创建和附加片段之前,我想首先确定它是否已经存在,然后根据需要,取消它,然后我想,shmctl(...,ipc_rmd,...)。
我可以帮助确定适当的事件顺序吗?
我认为我应该使用shmctl
来查看内容,(附件数量,如果存在等等)但我真的不知道。
可能还有另一个应用程序仍在使用该段,当然该应用程序必须先停止,并处理任何其他可能的异常。
我在想,在共享内存段中,我可以复制系统时钟,当应用程序检测到共享内存的时钟差异超过几秒钟,然后分离或其他内容。
谢谢,Mark。