0

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 を解析したくありません。XML パーサーを必要とせずに、org.bluez の子の名前を簡単に取得するために使用できる gdbus 関数は他にあるでしょうか?

4

1 に答える 1