libdbus 读取数组类型结果

Posted

技术标签:

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

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

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

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

【问题讨论】:

到目前为止你有什么? 【参考方案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 汁。)

【讨论】:

以上是关于libdbus 读取数组类型结果的主要内容,如果未能解决你的问题,请参考以下文章

LibreOffice:加载共享库时出错:libdbus-glib-1.so.2

IPC进程间通信 D-Bus(Desktop Bus)快速入门(以libdbus-glib库为例)

systemd 的 sd-bus 详细文档

Linux DBUS总线

使用 gdbus 查找 D-Bus 唯一地址

带有 C++11+ unique_ptr 的 Libevent