2014-01-24 29 views
0

我负责设计一个小型守护进程(在Debian Linux上),它将使用blackbox libfoo.so与外部EFT终端进行通信。有几个相同的EFT终端(大约100个),一个libfoo.so实例只能与一个终端通信。有一个初始化调用,它将实例绑定到终端。如何独立加载共享对象多次

我们主要在我们公司使用Java,但这可能需要C++实现。编程语言尚未定义。因为我们需要处理与多个终端(大约10个并发线程)的并发通信,所以我们需要加载libfoo.so的几个实例。我正在寻找设计原则如何解决这样的要求(dlopen只会加载一次SO,对于JNI来说也是一样)。我是否需要产生子进程?复制/粘贴SO并将其称为libfoo_1.so,libfoo_2.so等(aargh!)是否还有其他解决方案?

感谢

西蒙

+0

当你说“黑匣子”,你的意思是共享对象没有任何API? – SirDarius

+0

对不起,使用“黑匣子”时不准确。 SO确实有一个API,但是,我们没有源代码,并且不能影响API。 – Simon

回答

0

如果库没有API,这意味着它使用.init mechanism运行的代码,那么你就没有比分叉父进程更好的选择,并在子进程dlopen的图书馆。

这其实很简单,只要你记得wait为你的子进程在需要时终止。

如果您需要处理父代和子代进程之间的通信,则有多种Inter-process Communication方法可用,如pipes

+0

感谢您确认子流程是最佳选择。 – Simon