The low-level D-Bus C API学习笔记(一)DBus开发环境配置

D-Bus是一种消息总线系统,是应用程序相互通信的简单方法。除了进程间通信,D-Bus还有助于协调进程生命周期; 它使编写“单实例”应用程序或守护程序变得简单可靠,并在需要服务时按需启动应用程序和守护程序。

D-BUS 本质上是 进程间通信(inter-process communication)(IPC)的一个实现。不过,有一些 特性使得 D-BUS 远远不是“只是另一个 IPC 实现”。有很多不同的 IPC 实现,因为每一个都定位于解决 特定的明确定义的问题。CORBA 是用于面向对象编程中复杂的 IPC 的一个强大的解决方案。DCOP 是一个 较轻量级的 IPC 框架,功能较少,但是可以很好地集成到 K 桌面环境中。SOAP 和 XML-RPC 设计用于 Web 服务,因而使用 HTTP 作为其传输协议。D-BUS 设计用于桌面应用程序和 OS 通信。

D-Bus三层架构

D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统,包括:
1、函数库libdbus ,用于两个应用程序互相联系和交互消息。
2、一个基于libdbus构造的消息总线守护进程,可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。
3、基于特定应用程序框架的封装库或捆绑(wrapper libraries or bindings )。例如,libdbus-glib和libdbus-qt,还有绑定在其他语言,例如Python的。大多数开发者都是使用这些封装库的API,因为它们简化了D-Bus编程细节。libdbus被有意设计成为更高层次绑定的底层后端(low-levelbackend )。大部分libdbus的 API仅仅是为了用来实现绑定。

在这里声明,作者学习的是DBus的底层api,只涉及函数库libdbus。
编译环境:Ubuntu 16.04LTS
开发IDE:Clion
由于Ubuntu16自带libdus库,所以不需要安装。通过输入下面代码可以查看是否安装Dbus。

dbus-monitor

cmake中添加DBus库的位置
可以通过”find -name 文件名“查找

include_directories(/usr/include/dbus-1.0)
include_directories(/usr/lib/x86_64-linux-gnu/dbus-1.0/include)

具体CMake代码如下:

cmake_minimum_required(VERSION 3.9)
project(DBus_test)

set(CMAKE_CXX_STANDARD 11)

include_directories(/usr/include/dbus-1.0)
include_directories(/usr/lib/x86_64-linux-gnu/dbus-1.0/include)
include_directories(DBus)

set(CMAKE_CXX_STANDARD 11)

add_executable(DBus_test main.cpp DBus/DBus.cpp DBus/DBus.h)

target_link_libraries(
        DBus_test -ldbus-1 -lpthread
)

最后需要添加头文件来使用DBus函数。

#include <dbus/dbus.h>

猜你喜欢

转载自blog.csdn.net/czhzasui/article/details/80918133