在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)
,因为它可以是字符串,数组,字节数组.
从容器中获取数据的正确方法
1条答案
按热度按时间emeijp431#
最近的systemd版本有
sd_bus_message_peek_type()
函数来确定下一个值的类型。(注意GetAll属性值总是'variant'类型;它是你想要的变量中的值。)一般来说,给定的属性总是相同的类型。例如,如果你知道你刚刚读到了键值
Id
,那么你每次都需要一个字符串值。