如何解决将 sd-bus 事件移植到 libev
sd-event是一个类似于libev、libuv、libevent等的事件循环框架,我需要实现libev事件循环来监控服务。我能找到的所有手册页都讨论了 sd_bus_get_fd()
、sd_bus_get_events()
和 sd_bus_get_timeout()
的使用,例如,在 this page 上。有人有使用这三个函数的项目示例吗?
解决方法
对于 libev
没有任何东西,但是对于 libevent + sdbus ,它是这样的
//Global
static sd_bus *bus = NULL;
static struct event_base *base = NULL;
void bus_process(evutil_socket_t fd,short what,void *arg) {
sd_bus_process(bus,NULL);
}
void main() {
sd_bus_default_system(&bus);
sd_bus_request_name(bus,BUS_NAME,0);
int fd = 0;
int events = 0;
uint64_t usec;
struct event *ev_read;
base = event_base_new()
fd = sd_bus_get_fd(bus);
events = sd_bus_get_events(bus);
sd_bus_get_timeout(bus,&usec);
evutil_make_socket_nonblocking(fd);
ev_read = event_new(base,fd,EV_READ|EV_PERSIST,bus_process,NULL);
event_add(ev_read,NULL);
event_base_dispatch(base);
// wont get here,loop is now running and processing
return;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。