öº¯Êý¶¼²»ÔÊÐíÖ±½Óµ÷Óã¬ËüÃÇ×÷ΪApacheµÄÄÚ²¿º¯Êý¶ø´æÔÚ£¬¶ÔÍâÌṩµÄÔòÊǺêAPR_REGISTER_OPTIONAL_FNºÍAPR_RETRIEVE_OPTIONAL_FN¡£
¶ÔÓÚoptional_fun¿ÉÑ¡º¯Êý£¬×¢²áÓï¾äÈçÏ£º
APR_REGISTER_OPTIONAL_FN(optional_fun);
µ±Óû§ÏëʹÓÿÉÑ¡º¯ÊýµÄʱºò£¬Ê×ÏȱØÐë»ñµÃÆäº¯ÊýÖ¸Õ룬Ó÷¨ÈçÏ£º
APR_OPTIONAL_FN_TYPE(some_fn) *pfn;
pfn=APR_RETRIEVE_OPTIONAL_FN(some_fn);
5.5.8.3.¿ÉÑ¡º¯ÊýµÄʹÓÃ
5.5.9ÖÇÄܹҹ³
5.5.10¹Ò¹³¹¤×÷»úÖÆ
ÔÚÇ°ÃæµÄ²¿·Ö£¬ÎÒÃǶԹҹ³½øÐÐÁËÏêϸµÄ·ÖÎö£¬µ«ÊÇ»¹È±·¦Ò»¸öÕûÌåÉϵĸÅÄî¡£´ÓÕûÌåÉÏÀ´¿´¹Ò¹³µÄ¹¤×÷»úÖÆ¿ÉÒÔÓÃÏÂͼÀ´ÃèÊö£º

Ò»¸öÄ£¿é´Ó¹Ò¹³µÄ½Ç¶ÈÀ´¿´£¬Æä×îÖØÒªµÄÎÞ·ÇÊÇÁ½¸ö·½Ã棺¹Ò¹³×¢²áº¯ÊýºÍ¹Ò¹³´¦Àíº¯Êý¡£¹Ò¹³×¢²áº¯Êýͨ³£ÊÇÄ£¿é½á¹¹ÖеÄregister_hooksº¯ÊýÖ¸Õ룬¸Ãº¯ÊýÖ¸Õ뽫µ÷ÓÃʵ¼ÊµÄ¹Ò¹³×¢²áº¯Êý½øÐйҹ³×¢²á¡£¹Ò¹³×¢²áµÄ¹ý³ÌºÜ¼òµ¥£¬Í¨¹ýºêap_hook_xxxʵÏÖ¡£±ÈÈçÉÏͼÖÐÉùÃ÷ÁËÁ½¸ö¹Ò¹³abcºÍxyz¡£
Óë´Ëͬʱ£¬Ä£¿éÖÐÒ²½«ÉùÃ÷Óë¹Ò¹³¶ÔÓ¦µÄ¹Ò¹³º¯Êý£¬¸Ã¹Ò¹³±»´¥·¢µÄʱºò£¬¸Ãº¯Êý½«±»µ÷Óá£ÕýÈçÇ°ÃæÃèÊö£¬¿ÉÒÔʹÓúêap_run_xxx´¥·¢Ö¸¶¨µÄ¹Ò¹³¡£²»¹ý¹Ò¹³µÄ´¥·¢Í¨³£ÊÇÓɺËÐÄÄ£¿éÔÚ¶Ô¿Í»§¶ËÇëÇó½øÐд¦ÀíµÄ¹ý³ÌÖнøÐС£
ÎÒÃÇÀ´¿´Ò»¸ö¾ßÌåµÄÀý×Ó£¬ÕâÊǺËÐÄÄ£¿éÖйØÓÚ¹Ò¹³µÄ²¿·Ö¡£
´ÓÄ£¿éµÄ½á¹¹ÖпÉÒÔ¿´³ö£¬Ä£¿é½á¹¹Öаüº¬Ò»¸öÖ¸Õëregister_hook£¬¸ÃÖ¸Õëͨ³£Ö¸ÏòÄ£¿éÖеÄʵ¼ÊµÄ¹Ò¹³×¢²áº¯Êý£¬±ÈÈ磬¶ÔÓÚºËÐÄÄ£¿é¶øÑÔ£¬Æä¹Ò¹³×¢²áº¯Êýregister_hooks£¬ÄÇô½á¹¹ÖеĸÃÖ¸ÕëҲΪregister_hooks£º
AP_DECLARE_DATA module core_module = {
STANDARD20_MODULE_STUFF,
create_core_dir_config, /* create per-directory config structure */
merge_core_dir_configs, /* merge per-directory config structures */
create_core_server_config, /* create per-server config structure */
merge_core_server_configs, /* merge per-server config structures */
core_cmds, /* command apr_table_t */
register_hooks /* register hooks */
};
¶ø¾ßÌåµÄregister_hooksº¯ÊýÔòÈçÏ£º
static void register_hooks(apr_pool_t *p)
{
ap_hook_create_connection(core_create_conn, NULL, NULL,
APR_HOOK_REALLY_LAST);
ap_hook_pre_connection(core_pre_connection, NULL, NULL,
APR_HOOK_REALLY_LAST);
ap_hook_post_config(core_post_config,NULL,NULL,APR_HOOK_REALLY_FIRST);
ap_hook_translate_name(ap_core_translate,NULL,NULL,APR_HOOK_REALLY_LAST);
ap_hook_map_to_storage(core_map_to_storage,NULL,NULL,APR_HOOK_REALLY_LAST);
ap_hook_open_logs(ap_open_logs,NULL,NULL,APR_HOOK_REALLY_FIRST);
ap_hook_handler(default_handler,NULL,NULL,APR_HOOK_REALLY_LAST);
ap_hook_type_checker(do_nothing,NULL,NULL,APR_HOOK_REALLY_LAST);
ap_hook_fixups(core_override_type,NULL,NULL,APR_HOOK_REALLY_FIRST);
ap_hook_access_checker(do_nothing,NULL,NULL,APR_HOOK_REALLY_LAST);
ap_hook_create_request(core_create_req, NULL, NULL, APR_HOOK_MIDDLE);
APR_OPTIONAL_HOOK(proxy, create_req, core_create_proxy_req, NULL, NULL,
APR_HOOK_MIDDLE);
ap_hook_pre_mpm(ap_create_scoreboard, NULL, NULL, APR_HOOK_MIDDLE);
¡¡
}
¸Ãº¯ÊýµÄÈÎÎñ·Ç³£µÄ¼òµ¥£¬¼´ÉùÃ÷¸ÃÄ£¿éÐèҪʵÏֵĹҹ³£¬ÒÔ¼°¶ÔÓ¦µÄ´¦Àíº¯Êý£¬¹©Ö÷³ÌÐòµ÷Óá£
¹ØÓÚ×÷Õß
ÕÅÖÐÇ죬ĿǰÖ÷ÒªµÄÑо¿·½ÏòÊÇǶÈëʽä¯ÀÀÆ÷£¬Òƶ¯Öмä¼þÒÔ¼°´ó¹æÄ£·þÎñÆ÷Éè¼Æ¡£Ä¿Ç°ÕýÔÚ½øÐÐApacheµÄÔ´´úÂë·ÖÎö£¬¼Æ»®³ö°æ¡¶ApacheÔ´´úÂëÈ«¾°·ÖÎö¡·ÉÏϲᡣApacheϵÁÐÎÄÕÂΪ±¾ÊéµÄ²Ý°¸²¿·Ö£¬¶ÔApache¸ÐÐËȤµÄÅóÓÑ¿ÉÒÔͨ¹ýflydish1234 at sina.com.cnÓëÖ®ÁªÏµ!