在将D-bus IPC带入我的客户端程序时,我有一些疑问。
在我看来,D-bus有自己的方式来管理低级套接字 套接字fd打包到'DBusConnection'中,然后用于与守护进程,write / read / dispatch / loop进行通信。没关系。
但是如果客户端需要直接监视/选择另一个套接字,例如监视一个tcp端口,有时会使用自己的方式。
D-bus适合这种情况吗?当使用D-bus时,如何选择两个插座? D-bus是否设计为仅通过与守护进程连接的'DBusConnection'与其他本地进程通信?我刚开始使用D-bus,真的很困惑。
任何帮助将不胜感激〜
对不起,我没有清楚地说出来 我将以一个例子来详细说明它。
一些熟悉D-bus的人可能会查找“dbus-monitor”的源代码,这是D-bus上的一个工具。
'dbus-monitor'使用' dbus_bus_get '与守护进程建立连接,
然后调用' dbus_connection_get_object_path_data '来告诉dameon它支持哪些对象,等等(这里没有关心),
最后,' _dbus_loop_run '用于主循环。
有了好奇心,我就这些D-bus API的实现做了一些潜水工作。 (显然这还不够。)
从我的观点来看,与通常的IPC逻辑相同,这些步骤的基本工作看起来像(可能不太确定。):打开本地套接字,连接到服务器(守护进程),读/写/选择(服务器使用epoll)socket fd。
好的,谢谢你的耐心等待。很好〜
为了与守护进程通信,D-bus创建了一个套接字并使用自己的方式(API)来操作套接字。 (套接字fd封装成 D-bus的连接结构 - ' DBusConnection ',我们无法直接操作它。 )
现在我的问题是我是否需要D-bus来创建' DBusConnection '(封装本地套接字fd)以与守护进程通信,例如'dbus-monitor'。 同时,我的客户端应用程序还需要创建另一个socket fd来监视tcp端口 我想知道是否有办法同时'选择'这两种插座fd? (一个封装在D-bus的连接结构中 不能明确选择,另一个是通用套接字fd。 )