OpenWrt:libubox之uloop

數據結構:html

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;                    
};

事件回調函數:linux

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)

定時器事件:oop

/**
 * 註冊一個新定時器
 */
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)

進程事件:ui

/**
 * 註冊新進程到事件處理循環
 */
int uloop_process_add(struct uloop_process *p)

/**
 * 從事件處理循環中銷燬指定進程
 */
int uloop_process_delete(struct uloop_process *p)

參考文章

事件處理循環
libubox中uloop庫的使用
libubox-uloop.net

相關文章
相關標籤/搜索