如何使用c++从sd-bus容器获取数据

问题描述 投票:0回答:1

在DBus.properties中使用

GetAll
方法时,结果是

   array [
  dict entry(
     string "Id"
     variant             string "cockpit.service"
  )
  dict entry(
     string "Names"
     variant             array [
           string "cockpit.service"
        ]
  )
  dict entry(
     string "Following"
     variant             string ""
  )
  dict entry(
     string "Requires"
     variant             array [
           string "sysinit.target"
           string "system.slice"
           string "cockpit-wsinstance-http.socket"
           string "cockpit-wsinstance-https-factory.socket"
           string "cockpit-wsinstance-http-redirect.socket"
           string "-.mount"
           string "cockpit.socket"
        ]
  )
.... ]

因此,我使用

sd_bus_message_enter_container(reply,'a',"{sv}")
输入第一个数组容器,并使用
(reply,'e',"sv")
输入第二个 sv 容器。然后,我想从这个容器中读取数据,但它们的数据类型不同。所以我无法读取像,
read(reply,"s",&data)
(const char * data)
这样的数据,因为它可以是字符串,数组,字节数组......那么,我如何获取这些数据?

从容器获取数据的正确方法

c++ linux systemd dbus
1个回答
0
投票

最近的 systemd 版本具有

sd_bus_message_peek_type()
函数来确定下一个值的类型。 (请注意,GetAll 属性值始终为“variant”类型;它是您想要的变体内部的值。)

一般来说,给定的属性总是具有相同的类型。例如,如果您知道您刚刚读取了键名

Id
,那么您每次都会期待一个字符串值。

© www.soinside.com 2019 - 2024. All rights reserved.