在共享库的用户之间共享数据

时间:2011-11-15 18:30:07

标签: c++ linux shared-libraries

我有一个共享库,说foo.so,其中包含一个名为initialize()的函数。有多个可执行文件打开foo.so,每个都调用initialize()。我希望initialize()检查它是否已被另一个可执行文件调用,如果没有,则不执行任何操作。在这些流程之间共享此信息的最佳方式是什么?是否有一些特殊设施可以共享这些信息,还是需要使用标准IPC?

2 个答案:

答案 0 :(得分:3)

创建文件/ var / db / mylibname。如果open()返回一个错误,指出该文件已经存在,那么您的库已初始化。

它需要添加一个atexit()处理程序,该处理程序将在进程退出时删除该文件。仅当open()返回成功时才必须初始化Atexit。

<强>更新

如果资源必须只初始化一次,如果它们(资源)不依赖于当时使用该库的任何进程的存在,那么最好在/ var中创建文件/ run目录(以便在系统重启后清理它)并忘记atexit()。

答案 1 :(得分:2)

您需要使用标准IPC。我想到了内存映射,但首先要确定是否要为每个用户和每台计算机进行初始化。