数据结构:
struct uloop_fd { uloop_fd_handler cb; int fd; bool eof; bool error; bool registered; uint8_t flags; };struct uloop_timeout { struct list_head list; bool pending; uloop_timeout_handler cb; struct timeval time; };struct uloop_process { struct list_head list; bool pending; uloop_process_handler cb; pid_t pid; };
事件回调函数:
typedef void (*uloop_fd_handler)(struct uloop_fd *u, unsigned int events) // 描述符typedef void (*uloop_timeout_handler)(struct uloop_timeout *t) // 定时器typedef void (*uloop_process_handler)(struct uloop_process *c, int ret) // 进程
事件标志:
#define ULOOP_READ (1 << 0)#define ULOOP_WRITE (1 << 1)#define ULOOP_EDGE_TRIGGER (1 << 2)#define ULOOP_BLOCKING (1 << 3)#define ULOOP_EVENT_MASK (ULOOP_READ | ULOOP_WRITE)
主框架:
/** * 初始化事件循环 */int uloop_init(void)/** * 事件循环主处理入口 */void uloop_run(void)/** * 销毁事件循环 */void uloop_done(void)
描述符事件:
/** * 注册一个新描述符到事件处理循环 */int uloop_fd_add(struct uloop_fd *sock, unsigned int flags)/** * 从事件处理循环中销毁指定描述符 */int uloop_fd_delete(struct uloop_fd *sock)
定时器事件:
/** * 注册一个新定时器 */int uloop_timeout_add(struct uloop_timeout *timeout)/** * 设置定时器超时时间(毫秒),并添加 */int uloop_timeout_set(struct uloop_timeout *timeout, int msecs)/** * 销毁指定定时器 */int uloop_timeout_cancel(struct uloop_timeout *timeout)/** * 获取定时器还剩多长时间超时 */int uloop_timeout_remaining(struct uloop_timeout *timeout)
进程事件:
/** * 注册新进程到事件处理循环 */int uloop_process_add(struct uloop_process *p)/** * 从事件处理循环中销毁指定进程 */int uloop_process_delete(struct uloop_process *p)