什么是 D-Bus 对象树?

Posted

技术标签:

【中文标题】什么是 D-Bus 对象树?【英文标题】:What is D-Bus Object Tree? 【发布时间】:2019-10-05 18:30:33 【问题描述】:

我阅读了很多 D-Bus 文档并理解了各种概念,例如:

1. Object
2. Interface
3. Method
4. Signal
5. Bus Connection
6. System vs Session Daemon

然而,在阅读 ObjectManager::GetManagedObjects 时,我遇到了“对象树”这个概念。我知道,当我在服务对象上调用上述方法时,它会为我提供树中以服务对象为根的所有接口(因为服务对象实现了 D-Bus 的 ObjectManager 接口)。

我希望有人非常清楚地解释当一个对象位于“对象树”中的根对象“下方”时,这究竟意味着什么

    子对象只是父对象的属性吗? 子对象是否是父对象的子类(就像 OOP)

请!

【问题讨论】:

【参考方案1】:

对象树的语义由提供它的特定服务决定。按照惯例,对象在树中的位置仅由它们的对象路径决定。例如,/org/freedesktop/Accounts/User1000 被认为是/org/freedesktop/Accounts 的“子对象”。但是,除此之外没有正式的关系。

回答您的具体问题:

子对象只是父对象的属性吗?不,它们是具有自己的一组属性的独立对象。它们与父对象的唯一共同点是对象路径上的前缀。 子对象是父对象的子类吗(就像 OOP 一样)?不,它们可能实现相同的接口、不同的接口或介于两者之间的任何接口。通常,它们会实现不同的接口——父对象实现“manager”接口,子对象实现“item”接口,用于描述项目集合是很常见的。

【讨论】:

以上是关于什么是 D-Bus 对象树?的主要内容,如果未能解决你的问题,请参考以下文章

D-Bus:没有 ObjectManager 的导出对象

列出来自 Java 的 d-bus 注册对象

Vala:D-BUS 对象实现接口,属性错误

检查 D-Bus 对象是不是存在

Python+D-Bus+BlueZ 5:无法读取对象的属性?

尽管存在方法,但在对象路径中找不到 D-Bus 方法