1. 程式人生 > >回撥函式callback function的機制及使用舉例

回撥函式callback function的機制及使用舉例

如果把函式指標傳遞給另一個函式(呼叫者),當呼叫者執行時,函式指標所指的函式也被執行。被呼叫的函式就是回撥函式。

回撥函式實現的機制是

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()。