[英]Wrap sd_bus in single file descriptor
我正在编写一个将在后台使用 sd_bus 的库。 我的目标是
我的想法是使用一个 epoll 文件描述符,我将在其中添加 sd_bus 文件描述符和我将来拥有的任何其他文件描述符。 然后我的客户可以将这个 epoll 文件描述符挂接到他们的主循环中。 我将公开一个类似于 sd_bus_process 的 function,当 epoll 文件描述符激活时,客户端可以调用它。
一个挑战是 sd_bus 需要在每次睡眠之间更改其 fd、超时和监视事件(sd_bus_get_fd、sd_bus_get_events、sd_bus_get_timeout)。 为了获得灵感,我查看了 systemd 代码库中的 sd_event 实现,以及来自 Lennart Poettering 的email 。
我正在考虑向我的 epoll 组添加一个额外的 timerfd。 然后我可以在将控制权交还给客户端之前调整 timerfd 的超时时间,并且我可以使用普通的 epoll 调用调整总线 fd 上的监视事件。 客户端只会看到一个只需要监视 POLLIN 事件的 fd。
有没有更好/标准的方法来做到这一点? 还是我的想法似乎合理?
如果您已经链接到 libsystemd,只需使用真正的sd-event 模块。 它已经与 sd-bus 正确集成,并且在内部是基于 epoll 的,因此您可以通过sd_event_get_fd()
获取表示它的文件描述符以用于外部事件循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.