freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于apache源代碼的web應(yīng)用服務(wù)器的體系結(jié)構(gòu)分析論文(文件)

2025-07-06 21:19 上一頁面

下一頁面
 

【正文】 rebuild_conf_hash(processpconf, 0)。 m++) (*m)module_index = total_modules++。 if (ap_loaded_modules == NULL) { return Ouch! Out of memory in ap_setup_prelinked_modules()!。 *m2 = NULL。 if (error) { return error。以后如果需要新增加第三方模塊,同樣也添加到ap_loaded_modules數(shù)組中。} if (mnext == NULL) { mnext = ap_top_module。 if (dynamic_modules DYNAMIC_MODULE_LIMIT) { return apr_psprintf(p, Module \%s\ could not be loaded, because the dynamic module limit was reached. Please increase DYNAMIC_MODULE_LIMIT and repile., mname)。/39。)) mname = 1 + ap_strrchr_c(mname, 39。 ap_register_hooks(m, p)。 C_NUMBER_MAJOR,min_version則為MODULE_MAGIC_NUMBER_MINOR。模塊還必須將他們所有的指令處理函數(shù)加入到指令哈希表中,該過程由函數(shù)ap_add_module_mands完成,代碼如下:static void ap_add_module_mands(module *m, apr_pool_t *p){ apr_pool_t *tpool。 cmd = mcmds。amp。 dir = apr_pstrdup(tpool, cmdname)。 ++cmd。對(duì)于mod_so模塊也不例外,mod_so模塊的結(jié)構(gòu)和其中的指令如下所示:static const mand_rec so_cmds[] = {AP_INIT_TAKE2(LoadModule, load_module, NULL, RSRC_CONF | EXEC_ON_READ, a module name and the name of a shared object file to load it from), AP_INIT_ITERATE(LoadFile, load_file, NULL, RSRC_CONF | EXEC_ON_READ, shared object file or library to load into the server at runtime), { NULL } }。static const char *load_module(cmd_parms *cmd, void *dummy, const char *modname, const char *filename)該函數(shù)用來將共享對(duì)象載入到服務(wù)器地址空間中。 apr_dso_handle_sym_t modsym。 ap_module_symbol_t *modi。 *(ap_directive_t **)dummy = NULL。 modie = (ap_module_symbol_t *)sconfloaded_moduleselts。modie[i]。 return NULL。 i++) { const char *preload_name。 if (memcmp(modpname, mod_, 4)) { continue。} thismod_len = strlen(modname) strlen(_module)。t be loaded, NULL)。對(duì)于每一個(gè)模塊,要阿Apache認(rèn)定他是一個(gè)合法的模塊,就必須符合:(1)Apache必須保證其文件名是以mod_開始的。 if (apr_dso_load(amp。 if (apr_dso_sym(amp。 in file , szModuleFile, : , apr_dso_error(modhandle, my_error, sizeof(my_error)), 。 return apr_pstrcat(cmdpool, Can39。 return apr_pstrcat(cmdpool, Cannot load , szModuleFile, into server: , apr_dso_error(modhandle, my_error, sizeof(my_error)), NULL)。 modi = apr_array_push(sconfloaded_modules)。對(duì)動(dòng)態(tài)加載模塊檢查完畢后,Apache將檢查靜態(tài)鏈接模塊數(shù)組ap_preloaded_modules。} if (thismod_len != preload_len) { continue。 preload_len = strlen(preload_name) 2。 apr_size_t thismod_len。 for (i = 0。amp。 i sconfloaded_modulesnelts。} sconf = (so_server_conf *)ap_get_module_config(cmdservermodule_config, amp。 int i。 const char *szModuleFile = ap_server_root_relative(cmdpool, filename)。modname是加載模塊的名稱。.模塊中能夠處理的所有指令都保存在指令表so_cmds中,從中可以看出來,mod_so模塊可以處理的指令只有“LoadModule”和“LoadFile”,相應(yīng)的處理函數(shù)分別為load_module 和load_file。 動(dòng)態(tài)模塊加載大部分Apache標(biāo)準(zhǔn)模塊都可以通過靜態(tài)編譯鏈接加載執(zhí)行,不過對(duì)很多的第三方Apache模塊卻很難實(shí)現(xiàn),而這些模塊可以通過Apache的動(dòng)態(tài)加載機(jī)制實(shí)現(xiàn)模塊加載。 mlnnext = apr_hash_get(ap_config_hash, dir, APR_HASH_ KEY_STRING)。 mlncmd = cmd。} tpool = apr_hash_pool_get(ap_config_hash)。 const mand_rec *cmd。一旦插入完成,Apache將對(duì)插入的模塊進(jìn)行索引標(biāo)記。}ap_add_module用于在服務(wù)器中激活制定模塊m。)。 if (ap_strrchr_c(mname, 39。/39。} if (mmodule_index == 1) { mmodule_index = total_modules++。一旦激活所有的模塊,函數(shù)便調(diào)用apr_hook_sort_all對(duì)所有模塊內(nèi)的鉤子進(jìn)行排序,以便于處理。 return NULL。 *m != NULL。 *m != NULL。初始化的另一個(gè)工作是對(duì)ap_preloaded_modules進(jìn)行索引標(biāo)記,當(dāng)初始化時(shí)可以看到各個(gè)模塊的索引都被設(shè)置為1。 for (m = ap_preloaded_modules。 const char *error。if (error) { ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_EMERG, 0, NULL, %s: %s,ap_server_argv0, error)。(1)非核心模塊的注冊(cè)和卸載。Apache模塊通常是指一些具有一定相對(duì)獨(dú)立功能函數(shù)。除此之外,本章還介紹了核心模塊如何加載的過程,以及Apache模塊通信所采用的各種策略,包括簡(jiǎn)單通信方式、可選函數(shù)通信方式及提供者API方式。循環(huán)中主進(jìn)程所作的事情包括以下幾點(diǎn):(1)掛鉤注冊(cè)(2)二次配置文件讀取(3)到處注冊(cè)所有的可選函數(shù)(4)ap_mpm_run調(diào)用如果ap_mpm_run在執(zhí)行中發(fā)生錯(cuò)誤,則返回1,否則返回0。 destroy_and_exit_process(process, 0)。 ap_run_optional_fn_retrieve()。} if (ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) { ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0, NULL, Configuration Failed\n)。 apr_sort_hooks()。 destroy_and_exit_process(process, 1)。 ap_server_root = def_server_root。 } ap_conftree = NULL。 apr_pool_clear(pconf)。(2)實(shí)際的配置文件讀取。}if ( ap_run_post_config(pconf, plog, ptemp, server_conf) != OK) { destroy_and_exit_process(process, 1)。 }}if(rv ! = OK) { destroy_and_exit_process(process, exit_status)。代碼如下:signal_server = APR_RETRIEVE_OPTIONAL_FN(ap_signal_server)。 destroy_and_exit_process(process, 0)。 ap_fini_vhost_config(pconf, server_conf)。如果在啟動(dòng)Apache的時(shí)候通過E選項(xiàng)指定了日志文件,那么,此時(shí)必須使用ap_replace_stderr_log進(jìn)行輸出日志文件替換。除此之外,在啟動(dòng)的時(shí)候還需要一個(gè)臨時(shí)內(nèi)存池——ptemp。apr_pool_tag(ptemp, ptemp)。plog, pglobal)。h和?輸出一個(gè)可用的命令行選項(xiàng)的簡(jiǎn)要說明。h39。 *new = “DUMP_MODULES”。 break。t選項(xiàng)意味著僅對(duì)配置文件執(zhí)行語法檢查。case 39。L39。 destroy_and_exit_process(process, 0)。V選項(xiàng)用于顯示d和APR/APRUtil的版本和編譯參數(shù),然后退出。case 39。: printf(Server version: %s\n, ap_get_server_version())。如果config不以“/”開頭,則它是相對(duì)于ServerRoot的路徑。f39。 *new = DEBUG。E file選項(xiàng)用于將服務(wù)器的啟動(dòng)過程中的出錯(cuò)信息發(fā)送到file。case 39。} else { usage(process)。}else if (strncasecmp(optarg, warn, 4) == 0) { ap_default_loglevel = APLOG_WARNING。:if (strcasecmp(optarg, emerg) == 0) { ap_default_loglevel = APLOG_EMERG。 break。case 39。 break。c中的指令保存到ap_server_post_read_config數(shù)組中,而C中的指令則保存到ap_server_ pre_read_config數(shù)組中。 *new = apr_pstrdup(pmands, optarg)。: new = (char **)apr_array_push(ap_server_post_read_config)。c, amp。當(dāng)d啟動(dòng)的時(shí)候,它可能會(huì)帶有一系列的命令行參數(shù)。 destroy_and_exit_args(process, 1)。ap_setup_prelinked_modul
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1