代码之家  ›  专栏  ›  技术社区  ›  zeus_masta_funk

使用gdbus查找D总线唯一地址

  •  1
  • zeus_masta_funk  · 技术社区  · 7 年前

    我试图找到在Linux上使用GDBus库获取D总线系统总线中对象的唯一D总线地址的最佳方法。

    以下是我正在使用的库的版本号:

    # ls /usr/lib |grep -e dbus -e glib -e gio
    libdbus-1.so
    libdbus-1.so.3
    libdbus-1.so.3.14.11
    libdbus-glib-1.so
    libdbus-glib-1.so.2
    libdbus-glib-1.so.2.3.3
    libgio-2.0.so
    libgio-2.0.so.0
    libgio-2.0.so.0.5000.3
    libglib-2.0.so
    libglib-2.0.so.0
    libglib-2.0.so.0.5000.3
    

    基本上,我想知道对象的唯一名称/地址 /org/bluez/hci0 使用gdbus库位于系统总线上。有没有人举个例子来说明我如何使用C库来实现这一点?

    # dbus-monitor --system
    

    我需要的地址是 :1.22 。我几乎可以肯定,有一种更好的方法可以找到地址,然后解析该命令的文本输出。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Jussi Kukkonen    7 年前

    为什么不使用众所周知的服务名称来查找它(如果您想跟踪当前唯一的所有者,请使用 g_bus_watch_name() 为了得到它)。

    事实上,就bluez而言,我认为没有任何理由搜索“/org/bluez/hci0”,因为您应该使用D-Bus ObjectManager API来查找bluez服务导出的对象/接口。

        2
  •  0
  •   Philip Withnall    7 年前

    • :在你的思维方式中,D-Bus中没有地址。有 对象路径 , 唯一名称
    • :类似 :1.22 ,这唯一地标识到dbus守护进程的特定连接。通常,每个应用程序都有一个到守护进程的连接,因此这通常标识单个应用程序。(但是,如果应用程序需要,可以有多个总线连接;如果需要,每个连接将具有不同的唯一地址)。A. 是与dbus守护进程的服务连接的一致名称,该名称用作其唯一名称的别名。例如 org.bluez org.freedesktop.FileManager1 都是众所周知的名字。
    • 对象地址 /org/freedesktop/SomeService/blah 对象路径 。对象路径仅在单个D总线连接的上下文中唯一,因此路径 /a/b/c :1.1 :1.2 (因此,问题是如何找到对象路径的唯一名称