gpt4 book ai didi

c - 什么 gdbus 函数返回子对象节点列表?

转载 作者:行者123 更新时间:2023-11-30 14:43:07 25 4
gpt4 key购买 nike

我能够内省(introspection) DBus 节点,并获取一些包含有关子节点信息的 XML。然而,这需要我解析 XML,并且我试图保持应用程序的轻量级。我可以使用什么 gdbus 函数来简单地获取子节点对象名称列表?

下面是获取 XML 的代码。

#include <stdio.h>
#include <stdlib.h>
#include <gio/gio.h>

int main(int argc,char *argv[])
{
GError *err=NULL;
GVariant *result;
GDBusConnection *c;
const char *xml;

if ((c = g_bus_get_sync(G_BUS_TYPE_SYSTEM,NULL,&err)) == NULL) {
if (err) fprintf(stderr,"g_bus_get error: %s\n",err->message);
exit(1);
} /* if */
result = g_dbus_connection_call_sync(c,"org.bluez","/org/bluez",
"org.freedesktop.DBus.Introspectable",
"Introspect",NULL,G_VARIANT_TYPE("(s)"),
G_DBUS_CALL_FLAGS_NONE,3000,NULL,&err);
if (result==NULL) {
if (err) fprintf(stderr,"gbus_connection_call error: %s\n",
err->message);
exit(1);
} /* if */
g_variant_get(result,"(&s)",&xml);
printf("%s\n",xml);
exit(0);
}

所以上面的代码有效。在返回的 XML 深处有一些描述 org.bluez 对象节点子节点的元素。就我而言,有一个像这样的元素:

<node name="hci0"></node>.

但是,我不想解析 XML 来找到它。还有哪些 gdbus 函数可用于简单地检索 org.bluez 子级的名称,而不需要 XML 解析器?

最佳答案

我认为最好的选择是使用内置的 XML 解析器。这就是 gdbus introspect 命令行工具的实现方式。

调用g_dbus_node_info_new_for_xml解析 XML 的函数。这会返回一个 GDBusNodeInfo,您必须使用 g_dbus_node_info_unref() 释放它。我能找到的关于如何使用它的最好例子是 here ,它解析 XML,然后循环访问返回的结构体的 nodes 元素。

关于c - 什么 gdbus 函数返回子对象节点列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54118348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com