DBus - 如何列出系统总线中的所有服务(总线名称)?

时间:2012-03-20 17:50:13

标签: ipc introspection dbus

我想创建一个连接到dbus --system总线的程序,并列出所有连接的服务(bus_names)。就像" qdbus"。

有人可以帮助我吗?

我的dbus版本是dbus-1.2.24,我用C编程(没有绑定)。

1 个答案:

答案 0 :(得分:2)

您可能需要查看Qt DBus List Names example

QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface dbus_iface("org.freedesktop.DBus", "/org/freedesktop/DBus",
                          "org.freedesktop.DBus", bus);
qDebug() << dbus_iface.call("ListNames").arguments().at(0);

以下是使用命令行的示例:

# qdbus --literal --system org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
{"org.freedesktop.DBus", ":1.23", ":1.31", "org.freedesktop.Avahi", ":1.24", ":1.26"}
# dbus-send --system --dest=org.freedesktop.DBus --print-reply=literal /org/freedesktop/DBus org.freedesktop.DBus.ListNames
   array [
      org.freedesktop.DBus      :1.23      org.freedesktop.Avahi      :1.24      :1.33      :1.26   ]

您可能只想直接转到qt源中的源/ tools / qdbus / qdbus / qdbus.cpp。在那里你会注意到,如果args.empty()它调用printServiceNames(),它只返回在系统总线接口上调用的registeredServiceNames()的结果。然后,该代码执行以下操作:

QDBusReply<QStringList> QDBusConnectionInterface::registeredServiceNames() const
{
    return internalConstCall(QDBus::AutoDetect, QLatin1String("ListNames"));
}

现在我们已经完整了。