gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:18:07 25 4
gpt4 key购买 nike

在 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/

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