【问题标题】:libdbus reading array type resultlibdbus 读取数组类型结果
【发布时间】:2015-03-23 11:52:42
【问题描述】:

我必须阅读 org.freedesktop.NetworkManager.GetDevices

我的程序调用该方法并正确接收结果。

问题是如何支持字符串/路径类型的数组? 如何获取数组的长度以及如何获取单个元素, 谢谢。

【问题讨论】:

  • 到目前为止你有什么?

标签: c dbus


【解决方案1】:

对于非固定大小元素(如字符串)的数组,我们必须调用dbus_message_iter_recurse(&args, &string);,将指向主迭代器的指针作为参数,将新迭代器的指针作为第二个参数。

为了获取元素,我们调用dbus_message_iter_get_basic(&string, &paths);,其中paths是一个指向字符数组的指针。

整个代码如下所示:

if (!dbus_message_iter_init(msg, &args))
  fprintf(stderr, "Message has no arguments!\n");

  do {
    dbus_message_iter_recurse(&args, &string);
    do {

      dbus_message_iter_get_basic(&string, &paths);
      puts(paths);
    }
    while (dbus_message_iter_next(&string));
  } while (dbus_message_iter_next(&args));
    

【讨论】:

    【解决方案2】:

    很高兴您设法修复了您的代码,但请注意,建议您不要使用 libdbus-1 连接到 D-Bus:它的设计已经过时,并且是正确使用很痛苦。但是,与 libdbus-glib 不同,它仍然得到维护。

    使用更现代的高级 API 更容易,例如 GDBus

    (libdbus-glib 和 libdbus-1 故意不链接以避免给他们 google 汁。)

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 1970-01-01
      • 2019-03-28
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 2016-11-09
      相关资源
      最近更新 更多