DBus-Glib 使用教程 DBus-Glib 是 GNU 标准库,在 Dbus 接口上封装,方便上层服务与应用更好的使用。以下是对 DBus-Glib 的使用框架的详细介绍: 一、背景介绍 Phoenix 平台从安全的角度考虑,广泛的使用 DBUS 进行进程间通讯。DBus 总线分为系统总线与会话总线两类,两者之前不能互相通信,所以任何应用程序不能欺骗系统事件,安全性很好。 二、Dbus-glib 介绍 Dbus-glib 是 GNU 标准库,在 Dbus 接口上封装,方便上层服务与应用更好的使用。其形如一个 DBUS 代理服务器,由它进行所有 DBUS 消息的遍历与转发,服务端与消息发送端只需要向 DBUS deamon 申请注册唯一的 DBUS name 、绑定 GOBJECT 后,DBUS deamon 就会将申请连到该 DBUS name 的 DBUS 信息转发给指定应用。 Dbus-glib 的结构图如下: 所有的需要进行 DBUS 相互通讯的程序都只与 Dbus daemon 进行通讯。 函数调用流程: * 服务端申请一个 GObject,绑定以下信息:Dbus name:A,Dbus object:B,Dbus interface:C,Method :D * 注册到 dbus daemon 中,其中 D 设置为回调函数 * 客户端向 dbus daemon 申请调用注册信息为:Dbus name:A,Dbus object:B,Dbus interface:C 的 D 函数 * dbus daemon 收到客户端的消息后,查询是否存在该注册信息的回调函数,如果找不到 daemon 会产生错误消息,作为应答消息给客户端。 * 找到则且执行该回调函数,将结果返回给客户端。 消息发送流程: * 消息发送端申请一个 GObject,绑定以下信息:Dbus name:A,Dbus object:B,Dbus interface:C,signal :D * 注册到 dbus daemon 中 * 消息接收端向 dbus daemon 申请绑定注册信息为:Dbus name:A,Dbus object:B,Dbus interface:C signal 为 D 的消息回调函数 * dbus daemon 收到消息发送端发出的 DBUS 消息后,查询是否存在该消息的绑定回调函数,且执行该回调函数。 三、通过 Dbus-glib 写一个服务端 dbus-glib 定义向 dbus daemon 申请一个注册信息的形式为 GObject(C 语言)的对象。 写一个 XML 先学习怎么使用内置的 xml 文件自动创建出易于使用的 dbus 代理对象。 XML 文件描述了一个名为“HelloWorld”,输入参数为 char *,输出参数为 char*[]的被调用的函数。dbus 的接口描述文件统一采用 utf-8 编码。 type 域数据类型定义如下: * a ARRAY 数组 * b BOOLEAN 布尔值 * d DOUBLE IEEE 754 双精度浮点数 * g SIGNATURE 类型签名 * i INT32 32 位有符号整数 * n INT16 16 位有符号整数 * o OBJECT_PATH 对象路径 * q UINT16 16 位无符号整数 * s STRING 零结尾的 UTF-8 字符串 * t UINT64 64 位无符号整数 * u UINT32 32 位无符号整数 * v VARIANT 可以放任意数据类型的容器,数据中包含类型信息。 * x INT64 64 位有符号整数 * y BYTE 8 位无符号整数 例如 "(i(ii))" 定义结构时使用。例如 "{}" 定义键-值对时使用。例如
剩余15页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助