如何确定"结构数组的长度"在DBus消息中?

时间:2016-01-08 18:46:45

标签: c ipc dbus

我使用libdbus API发送方法调用并接收回复。对于一种这样的方法,我期待回复格式:

"a(sqns)"

DBus签名表示法中的含义:结构数组,其中每个结构的内容是字符串,uint16,int16和string。

使用DBusMessageIter(迭代器),我可以遍历数组和结构。但是,为了简化我的解析代码,有没有办法在迭代之前得到这个数组的长度?

不幸的是,我不相信dbus_message_iter_get_fixed_array适用于这种情况,因为我的数组包含的结构按此定义显示为non-fixed size

我从API文档中看不出如何做到这一点(或者如果可能的话)。

1 个答案:

答案 0 :(得分:0)

参加聚会可能有点晚,但为将来参考,我在使用dbus_message_iter_get_element_count()方面取得了成功。您可以像这样使用它:

int count = dbus_message_iter_get_element_count(iter);
if(count > 0) {
  DBusMessageIter arriter;
  dbus_message_iter_recurse(iter, &arriter);
  for(int i = 0; i < count; ++i) {
    // read items from arriter
  }
}
dbus_message_iter_next(iter);