我想创建一个连接到dbus --system总线的程序,并列出所有连接的服务(bus_names)。就像" qdbus"。
有人可以帮助我吗?
我的dbus版本是dbus-1.2.24,我用C编程(没有绑定)。
答案 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"));
}
现在我们已经完整了。