帮助中心 广告联系

昆明地铁最新线路图-路线图、时刻表、运营时间、规划全图、交通图-昆明地铁网

热门关键词:

Qt高级——D-Bus快速入门(2)

来源:原创/投稿/转载 发布时间:2019-09-29

  当用户******进桌面环境的时候,系统启动脚本会调用到dbus-launch来启动一个dbus-daemon进程,同时会把启动的dbus-daemon******赋予环境变量DBUS_SESSION_BUS_ADDRESS。一般情况下,不需要考虑DBUS_SESSION_BUS_ADDRESS,但某些时候,单独启动一个dbus-daemon有助于程序的调试。利用dbus-daemon自启动机制运行的服务进程,都是后台进程,标准输出设备已经被重定向,如果B进程有一些调试用的打印信息输出,则很难直接查看。此时,可以单独启动一个dbus-daemon,让A和B都使用自己启动的dbus-daemon,此时,dbus-daemon能把B的打印信息显示出来。DBUS_VERBOSE=1 dbus-daemon --session --print-address

  然后,在执行A程序的时候,设置环境变量DBUS_SESSION_BUS_ADDRESS为刚才得到的******值。DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-7MlJMxxGnW,guid=437c0e6060516670cfccacc15afc43c6 ./A此时运行程序A和B,使用自己启动的dbus-daemon来转发消息,并且会把B的打印信息显示出来。消息总线守护进程是一个特殊的进程,用于管理系统内的总线,可以将一个进程的消息路由给另外一个进程。如果有很多应用程序连接到消息总线守护进程的总线上,总线能把消息路由到对应的一个或多个进程中去。因此在总线层上,实现了点对点通信的支持,也实现了广播/订阅通信方式。在最底层,D-Bus只支持点对点的通信,一般使用本地套接字(AF_UNIX)在应用和消息总线守护进程之间通信。D-Bus的点对点是经过bus daemon抽象过的,由bus daemon来完成寻址和发送消息,因此每个应用不必关心要把消息发给哪个进程。D-Bus发送消息通常包含如下步骤:C、目标程序接收到消息,然后根据消息的种类,做不同的响应:确认、应答、忽略。总线是D-Bus的进程间通信机制,一个系统中通常存在多条总线,总线由D-Bus总线守护进程管理。最重要的总线为系统总线(System Bus),Linux内核引导时,系统总线就已被装入内存。只有Linux内核、Linux桌面环境和权限较高的程序才能向系统总线写入消息,以此保障系统安全性,防止有恶意进程假冒Linux发送消息。会话总线(Session Buses)由普通进程创建,可同时存在多条。会话总线属于某个进程私有,用于进程间传递消息。

  D-Bus封装层是将libdbus底层API绑定到特定的对象系统或是语言中,將不便使用的libdbus底层API封裝成可以在应用层使用的高級API,如libdbus-glib、libdbus-qt等。D-Bus在很多不同的编程语言上都有其接口实现。不同语言的接口封装了D-Bus低级API,提供了更符合编程语言的语法结构。实现D-Bus接口的语言正在逐渐增加。在C语言中,有最底层的API,但其实现及使用上非常复杂。C语言中另一个实用化的实现基于GLib。在Java、Perl、Python等都有D-Bus接口实现。

  总线是消息总线守护进程(message bus daemon)的运行实例,每个总线都有一个******,应用进程就是通过总线******和相应的总线连接的。总线上的每一个连接都有一个连接名,连接名也称bus name。每个连接上有至少一个对象,通常有多个对象,对象使用对象路径唯一标识。对象要实现一个或多个接口,每个接口包含一组方法和信号。

  在D-Bus中,总线(bus)是核心的概念:不同的程序可以通过总线进行某些操作,比如方法调用、发送信号和监听特定的信号。总线通常有两种,系统总线(system bus)和用户总线(session bus),系统总线通常只有一条,用户总线在用户******时创建。系统总线是一个持久的总线,在系统启动时就创建,供系统内核和后台进程使用,具有较高的安全性。系统总线最常用是发送系统消息,比如:插入一个新的存储设备、有新的网络连接等。会话总线是在某个用户******后启动,属于某个用户私有,是某用户的应用程序用来通话的通道。在很多嵌入式系统中,只有一个用户ID******运行,因此只有一个会话总线。一条消息总线就是一个消息路由器,是消息总线守护进程(message bus daemon)的一个实例。

责任编辑:admin

本网转载作品的目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。如涉及作品内容、版权等问题,请联系我们进行修改或删除!