回撥函式callback function的機制及使用舉例
阿新 • • 發佈:2018-12-14
如果把函式指標傳遞給另一個函式(呼叫者),當呼叫者執行時,函式指標所指的函式也被執行。被呼叫的函式就是回撥函式。
回撥函式實現的機制是
1、定義一個回撥函式;
2、提供函式實現的一方在初始化的時候,通過註冊函式 向呼叫者(管理單元/排程函式)註冊回撥函式的函式指標。
3、當特定的事件發生時候,呼叫者使用函式指標呼叫回撥函式對事件進行處理。
舉例:
Quagga0.9.22中OSPF註冊新建介面事件回撥函式(省略了無關語句):
定義回撥函式:
int ospf_if_new_hook (struct interface *ifp){函式定義}
定義儲存回撥函式的全域性變數(每個上層協議程序一個):
struct if_master{
int (*if_new_hook) (struct interface *);
} if_master;
定義註冊函式:
void if_add_hook (int type, int (*func)(struct interface *ifp)){ if_master.if_new_hook = func;}
註冊回撥函式:
if_add_hook (IF_NEW_HOOK, ospf_if_new_hook);
定義呼叫者函式:
struct interface * if_create (const char *name, int namelen){(*if_master.if_new_hook) (ifp);}
效果:每當有新建介面事件時,就會執行ospf_if_new_hook()。