gpt4 book ai didi

c - 使用 libdbus-1 实现 Get 和 GetAll

转载 作者:行者123 更新时间:2023-11-30 19:30:54 25 4
gpt4 key购买 nike

鉴于 libdbus-1 是不可协商的,我想为 DBus 属性实现 Get 和 GetAll。

我真的没有看到任何这方面的例子。

我只需将该方法与 dbus_message_is_method_call() 相匹配并做出相应响应吗?

或者是否有一种内置的方法可以做到这一点,我有一些代码来完成繁重的工作。

再说一遍,切换库不是一个选项,所以请不要说使用 Qt、glib、libnih、libsystemd 或其他任何东西。请具体说明 libdbus-1,否则不要回答。

最佳答案

查看libdbus-1源代码:git://anongit.freedesktop.org/dbus/dbus

bus/driver.c 中有一个名为bus_driver_handle_get_all() 的示例。该函数实现了对“GetAll”的回复。

当然,我们还需要在 xml 文件中实现 GetAll 以进行内省(introspection)。

<interface name='org.freedesktop.DBus.Properties'>
<method name='Get'>
<arg name='interface' type='s' direction='in' />
<arg name='property' type='s' direction='in' />
<arg name='value' type='s' direction='out' />
</method>

<method name='GetAll'>
<arg name='interface' type='s' direction='in'/>
<arg name='properties' type='a{sv}' direction='out'/>
</method>
</interface>

因此,要回复此问题,我们需要迭代所有属性并将它们加载到 DBusMessageIter 中,然后将此回复发送给发送者。

显然“获取”响应要容易得多,在这种情况下我们只需要返回一个显然与我们的属性匹配的字符串。同样,这是在同一个文件中,bus/driver.c 中的函数:bus_driver_handle_get()。

关于c - 使用 libdbus-1 实现 Get 和 GetAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49780586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com