dbus --- 简介
官方资料:https://www.freedesktop.org/wiki/Software/dbus/
dbus 源码库(https://gitlab.freedesktop.org/dbus/dbus),libdbus 是 dbus 库的一部分,libdbus 是 low-level API,下图所有的程序,都是通过 libdbus 实现,源码位于 dbus 库,但是应用开发不建议使用 dbus 库
D-Bus 是一个消息通信系统,是 Linux 上的一种进程间通信方式,内部使用 socket 技术实现。dbus-daemon
是D-Bus
的守护进程,负责管理消息的路由和应用程序的注册。
D-Bus有两种类型的消息总线,分别是系统总线和会话总线,
- system bus: 系统总线。顾名思义,系统级服务。和常规服务分来是为了避免消息拥塞造成延迟或卡顿。
- session bus: 会话总线。常规服务使用。
应用程序可以在总线上注册 D-Bus 服务,一个服务可以包含多个对象,一个对象可以包含多个接口,一个接口可以包含多个方法、属性、信号(都是API)
为了使服务的方法可以被其他应用程序所调用,对象必须在D-Bus守护进程中进行注册。这种在D-Bus中注册对象的行为称为exporting。
每个对象都有一个路径格式的唯一标识符。例如,代表蓝牙设备的对象是/org/bluez/hci0/dev_4c_4c_d7_64_cd_22_0a的路径标识符。 对象使用其路径注册到D-Bus守护进程,使D-Bus守护程序可以路由到对象。
对象的接口可以发出(Signal)信号, 信号可以认为是一个事件。 应用程序可以订阅自己感兴趣的信号, 一个信号可以被一个或多个应用程序订阅。信号触发后,会被传送到每一个订阅该信号的应用程序中。
每个服务都有一个名称,比如以冒号开头的:1.16。但是可以注册一个名称代替冒号开头的形式。比如蓝牙守护进程就是一个D-Bus服务,它拥有一个众所周知的名称(well-known bus name):org.bluez。