首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >g_dbus_proxy_new_for_bus_sync:断言'g_variant_is_object_path (object_path)‘失败

g_dbus_proxy_new_for_bus_sync:断言'g_variant_is_object_path (object_path)‘失败
EN

Stack Overflow用户
提问于 2019-05-21 23:36:01
回答 1查看 910关注 0票数 1

代码后面的代码应检索在DBus上公开的systemd-logind IdleSinceHint属性

代码语言:javascript
复制
/*
 * Compile with:
 *   gcc -Wall print_user_idle_time.c -o print_user_idle_time `pkg-config --libs gio-2.0 --cflags`
 */

#include <gio/gio.h>

static void
print_user_idle_time (GDBusProxy *proxy)
{
    gchar *property = "IdleSinceHint";
    GError *error = NULL;
    GVariant *ret;
    guint64 user_idle_time;

    ret = g_dbus_proxy_get_cached_property(proxy, property);
    if (!ret) {
        g_dbus_error_strip_remote_error (error);
        g_print ("IdleSinceHint failed: %s\n", error->message);
        g_error_free (error);
        return;
    }

    g_variant_get (ret, "(^ao)", &user_idle_time);
    g_print("%lu\n", user_idle_time);
    g_variant_unref (ret);
}

int
main (int argc, char *argv[])
{
    GDBusProxy *proxy;
    gchar *name = "org.freedesktop.login1";
    gchar *object_path = "org/freedesktop/login1";
    gchar *interface_name = "org.freedesktop.login1.Manager";
    /* Create a D-Bus proxy */
    proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
                                           G_DBUS_PROXY_FLAGS_NONE,
                                           NULL,
                                           name,
                                           object_path,
                                           interface_name,
                                           NULL, NULL);
    g_assert (proxy != NULL);

    print_user_idle_time (proxy);

    g_object_unref (proxy);

    return 0;
}

但是当它运行时,它会在断言g_assert (proxy != NULL);时失败,并返回错误

代码语言:javascript
复制
(process:9059): GLib-GIO-CRITICAL **: 17:29:07.245: g_dbus_proxy_new_for_bus_sync: assertion 'g_variant_is_object_path (object_path)' failed
**
ERROR:print_user_idle_time.c:44:main: assertion failed: (proxy != NULL)

会有什么问题呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-22 03:08:41

你看到的问题是对象路径必须以'/‘开头,所以它是/org/freedesktop/login1

除此之外,属性GVariant处理行看起来不合适。这应该足够了:

代码语言:javascript
复制
user_idle_time = g_variant_get_uint64 (ret);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56241782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档