linux 如何使用C++从SD总线容器中获取数据

irtuqstp  于 5个月前  发布在  Linux
关注(0)|答案(1)|浏览(79)

在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),因为它可以是字符串,数组,字节数组.
从容器中获取数据的正确方法

emeijp43

emeijp431#

最近的systemd版本有sd_bus_message_peek_type()函数来确定下一个值的类型。(注意GetAll属性值总是'variant'类型;它是你想要的变量中的值。)
一般来说,给定的属性总是相同的类型。例如,如果你知道你刚刚读到了键值Id,那么你每次都需要一个字符串值。

相关问题