linux - sd-bus中的 'slot'是什么(C语言)

标签 linux dbus systemd

在 systemd 的 sd-bus.h 文件中有几个 API,可以选择使用 slot 参数。下面是一些示例:

int sd_bus_call_async(sd_bus *bus, sd_bus_slot **slot, sd_bus_message *m, sd_bus_message_handler_t callback, void *userdata, uint64_t usec);
int sd_bus_add_filter(sd_bus *bus, sd_bus_slot **slot, sd_bus_message_handler_t callback, void *userdata);
int sd_bus_add_fallback(sd_bus *bus, sd_bus_slot **slot, const char *prefix, sd_bus_message_handler_t callback, void *userdata);

如果调用代码指定了 NULL 那么它就变成了一个“ float 插槽”,我猜这意味着调用代码不需要担心它。

我看到的大部分示例源代码都像这个示例项目:https://github.com/tasleson/dbus-signals/blob/6d0e43d02d24ed51a17ce7df15a3a0a64ec0170d/spamsignals.c#L160

它占用一个插槽,然后在一段时间后取消引用该插槽。但它实际上并没有对它做任何事情。

最佳答案

传递您自己的插槽会使您的 sd-bus-match 生命与插槽之一纠缠在一起。这样,当您取消引用插槽时,您也会破坏匹配。
否则,传递 NULL 会将匹配的生命周期绑定(bind)到总线对象本身。
您列出的其他功能也是如此:
* 带有插槽的 sd_bus_call_async 使您可以选择通过取消引用插槽来破坏异步调用。
*带有插槽的 sd_bus_add_filter 将在您取消引用插槽时破坏过滤器。
我不确定 sd_bus_add_fallback 因为我从来没有听说过它。
在此处检查未引用插槽时调用的函数:https://github.com/systemd/systemd/blob/a7753693547233e4a1d6e10b1a8f6515a477f227/src/libsystemd/sd-bus/bus-slot.c#L68

关于linux - sd-bus中的 'slot'是什么(C语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43414858/

相关文章:

linux - 为什么 Ubuntu 18.04 使用 `/sbin/init` 而不是 `systemd` ?

linux - 将一些行组合成一个

linux - 如何使用 collectd 在 linux 中将系统指标从一台机器推送到另一台机器?

java - 从 java 程序运行 bash 脚本时的奇怪行为

linux - 如何在 Linux 上增加每个虚拟内存?(命令行)

qt - 通过 QDBus 发送 float

qt - 在路径/org/freedesktop/NetworkManager/ActiveConnection/的对象上没有这样的接口(interface) 'org.freedesktop.DBus.Properties'

python - 装饰 DBUS 方法

amazon-web-services - Ubuntu Aws 用户 session 停止

python - Systemd 服务不执行我的 Python 脚本