OpenWrt:libuboxのuloop

2061 ワード

データ構造:
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