微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 sd-bus 事件移植到 libev

如何解决将 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 举报,一经查实,本站将立刻删除。