ap hook handler的定義在哪?

2021-06-07 22:44:07 字數 2013 閱讀 5889

近日在看apache的原始碼,在他的module的定義中,ap_hook_handler是乙個非常重要的函式。用來在apache中註冊你的自定義module中的callback函式。

遍搜ap_hook_handler,尋不得在哪定義的。最後發現,這傢伙把所有的hook函式都定義在巨集裡。比**混淆都nb。作為乙個長期從事.net開發的人而言,可稱得上**了。a:

ap_declare_hook(int,handler,(request_rec *r))b:

#define ap_declare_hook(ret,name,args) apr_declare_external_hook(ap,ap,ret,name,args)c:

#define apr_declare_external_hook(ns,link,ret,name,args) \d:

typedef ret ns##_hook_##name##_t args; \

link##_declare(void) ns##_hook_##name(ns##_hook_##name##_t *pf, \

const char * const *aszpre, \

const char * const *aszsucc, int norder); \

link##_declare(ret) ns##_run_##name args; \

apr_implement_hook_get_proto(ns,link,name); \

typedef struct ns##_link_##name##_t \

ns##_link_##name##_t;e:

#define ap_declare(type)            typef:

#define apr_implement_hook_get_proto(ns,link,name) \

link##_declare(apr_array_header_t *) ns##_hook_get_##name(void)

把a套入b,得到:

ns = ap

name = handler

arg = (request_rec *r)

把b套入c,又得到:

link = ap

把c套入d,再加上e中的宣告, 最終得到:

typedef int ap_hook_handler_t (request_rec *r);

void ap_hook_handler(ap_hook_handler_t *pf, char * const *aszpre, char * const *aszsucc, int norder);

int ap_run_handler (request_rec *r);

apr_implement_hook_get_proto(ap,ap,handler);

typedef struct ap_link_handler_t

ap_link_handler_t;

其實到這裡,我已經看到了ap_hook_handler的宣告。因此才得以合法的呼叫ap_hook_handler。一切**於**a,a中的一行,最終會被替代成一堆struct定義和函式宣告。讓我們繼續挖一下,把他完全展開,將f也套入apr_implement_hook_get_proto(ap,ap,handler);,得到:

typedef int ap_hook_handler_t (request_rec *r);

void ap_hook_handler(ap_hook_handler_t *pf, char * const *aszpre, char * const *aszsucc, int norder);

int ap_run_handler (request_rec *r);

apr_array_header_t * ap_hook_get_handler(void);

typedef struct ap_link_handler_t

ap_link_handler_t;

感謝netbeans,在linux下,著實除了他,別的工具真的很難挖出這個大蘿蔔。

Spss中定比 定距 定序 定類的區別

spss中定比 定距 定序 定類的區別 1 定比 主要是數值或數字型別,可以做加減運算,目的是得到更加精確的值,比如身高或者體重之類的 2 定距 主要是數值或數字型別,有單位,可以做加減運算,但是不能做乘除運算,比如溫度之類的 3 定類 主要為型別分類,但是分類是沒有大小區分的,比如表示性別,用1表...

淡定,淡定,淡定

我的思緒過分調皮,有時候有個靈感覺得挺好還沒來得及記下來就又去想別的事情了,真不知道自己是怎麼回事。有時候糾結一件事情,是因為不知道如何選擇下面的行動,通常我看到乙個問題後都會冒出a b c三種選擇,如果其中乙個優勢特別顯著還好要是勢力相當就玩完了,我就會很矛盾很糾結,通常是先往東在往西或許還要來回...

SharePoint search 功能的定製開發

概要 客戶要求改善 sharepoint 2007的搜尋功能,我們要自定義開發搜尋功能,一翻調查和研究,sharepoint 的搜尋用到keywordsearchquery和fulltextsearchquery 兩種方式,因為我們要用到自定義的sharepoint list欄位做為過慮條件,所以採...