libdbus读取数组类型的结果

时间:2015-01-24 15:08:08

标签: c dbus

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

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

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

2 个答案:

答案 0 :(得分:0)

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

要获取元素,我们调用dus_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));
    




答案 1 :(得分:0)

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

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

(libdbus-glib和libdbus-1故意不联系,以免给他们谷歌汁。)