Какая функция gdbus возвращает список узлов дочерних объектов? - PullRequest
0 голосов
/ 10 января 2019

Я могу проанализировать узел 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?

1 Ответ

0 голосов
/ 10 января 2019

Я думаю, что вам лучше всего использовать встроенный анализатор XML. Так реализован инструмент командной строки gdbus introspect.

Вызовите функцию g_dbus_node_info_new_for_xml для анализа XML. Это вернет вам GDBusNodeInfo, который вы должны освободить g_dbus_node_info_unref(). Лучший пример того, как его использовать, это здесь , который анализирует XML, а затем перебирает элемент nodes возвращаемой структуры.

...