数据结构:

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)

参考文章

事件处理循环
libubox中uloop库的使用
libubox-uloop


txgcwm
764 声望71 粉丝

Linux C/C++


引用和评论

0 条评论