问题描述
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;
}