DBusMessage 概述和数据结构
1. 概述
DBusMessage 是 D-Bus 通信的基本单元,用于在应用程序之间传递数据。每个消息由两部分组成:
- 消息头(Header):包含路由信息、消息类型、标志等元数据
- 消息体(Body):包含实际的数据参数
1.1 消息在 D-Bus 中的作用
D-Bus 是一个进程间通信(IPC)系统,DBusMessage 是通信的基本载体:
- 方法调用(Method Call):客户端调用服务端的方法
- 包含目标服务、对象路径、接口、方法名
- 包含输入参数
- 期望收到方法返回或错误消息
- 方法返回(Method Return):服务端返回方法调用的结果
- 包含回复序列号(用于匹配原始方法调用)
- 包含输出参数或返回值
- 信号(Signal):应用程序广播事件通知
- 不期望回复
- 可以被多个接收者订阅
- 用于事件通知和状态变化
- 错误(Error):方法调用失败时返回错误信息
- 包含错误名和错误消息
- 包含回复序列号(用于匹配原始方法调用)
1.2 消息的生命周期
消息从创建到销毁的完整生命周期:
创建 → 填充 → 锁定 → 序列化 → 传输 → 反序列化 → 使用 → 释放
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
new set lock marshal send demarshal get unref
详细步骤:
- 创建(Creation)
- 使用
dbus_message_new_*函数创建 - 分配内存并初始化结构
- 引用计数初始化为 1
- 使用
- 填充(Population)
- 设置头字段(路径、接口、成员等)
- 添加参数到消息体
- 可以多次修改
- 锁定(Locking)
- 调用
dbus_message_lock()锁定消息 - 锁定后不允许修改
- 确保网络数据的一致性
- 调用
- 序列化(Marshaling)
- 转换为网络字节流格式
- 处理字节序对齐
- 准备传输
- 传输(Transport)
- 通过
DBusConnection发送 - 使用底层传输机制(Unix socket、TCP 等)
- 通过
- 反序列化(Demarshaling)
- 接收端解析字节流
- 重建
DBusMessage结构


