我有一个共享库,说foo.so,其中包含一个名为initialize()
的函数。有多个可执行文件打开foo.so,每个都调用initialize()
。我希望initialize()
检查它是否已被另一个可执行文件调用,如果没有,则不执行任何操作。在这些流程之间共享此信息的最佳方式是什么?是否有一些特殊设施可以共享这些信息,还是需要使用标准IPC?
答案 0 :(得分:3)
创建文件/ var / db / mylibname。如果open()返回一个错误,指出该文件已经存在,那么您的库已初始化。
它需要添加一个atexit()处理程序,该处理程序将在进程退出时删除该文件。仅当open()返回成功时才必须初始化Atexit。
<强>更新强>
如果资源必须只初始化一次,如果它们(资源)不依赖于当时使用该库的任何进程的存在,那么最好在/ var中创建文件/ run目录(以便在系统重启后清理它)并忘记atexit()。
答案 1 :(得分:2)
您需要使用标准IPC。我想到了内存映射,但首先要确定是否要为每个用户和每台计算机进行初始化。