Mon*_*onk 7 linux shared-libraries
我有一个共享库(.so),我在执行应用程序之前预先加载,我在共享库中有一些应用程序使用的全局数据结构.应用程序可以使用fork()创建其他进程,这些进程可以更新共享库中的全局数据结构.我希望在所有流程中保持对这些全局数据结构的一致看法.有什么方法可以在Linux中实现这一点吗?
我已经尝试使用shm_*调用和mmap()将共享库的全局数据映射到共享段但它不起作用.
最清楚地说明这一点:你不能完全按照你的要求做.Linux不支持共享链接器列出的全局变量.该内存将位于不可共享的映射到交换空间中.
我可以提供的一般食谱是:
如果你真的只关心一个父和它的分叉子,你可以使用匿名映射而不打扰文件,你可以将映射的位置存储在全局(可以在子节点中读取).
如何在已知的目录位置创建一个简单的管道,然后让其他进程分别打开该管道以读取/写入 fread/fwrite,以共享数据......棘手的部分是确保数据通过管道传递以免在本案中造成腐败。上面您提到使用共享内存 shm_ 和 mmap 与进程相关联,当您分叉代码时,这没有问题,因为分叉代码是原始进程的一部分!希望这可以帮助。
最好的问候,汤姆。