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

正文內(nèi)容

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

2025-06-18 21:19本頁面
  

【正文】 les++。 dynamic_modules++。 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)。} } if (ap_strrchr_c(mname, 39。/39。)) mname = 1 + ap_strrchr_c(mname, 39。/39。)。 if (ap_strrchr_c(mname, 39。\\39。)) mname = 1 + ap_strrchr_c(mname, 39。\\39。)。 ap_add_module_mands(m, p)。 ap_register_hooks(m, p)。 return NULL。}ap_add_module用于在服務(wù)器中激活制定模塊m。再將模塊加入服務(wù)器之前,Apache必須判斷模塊的版本是否與當(dāng)前Apache服務(wù)器的版本相同。 C_NUMBER_MAJOR,min_version則為MODULE_MAGIC_NUMBER_MINOR。所有的模塊最終都被加入到全局模塊列表ap_top_module中,所有新增加的模塊都被插入到ap_top_module鏈表的起始位置。一旦插入完成,Apache將對插入的模塊進(jìn)行索引標(biāo)記。有一點要注意,累積的總模塊數(shù)不能超過動態(tài)載入模塊的最大數(shù)DYNAMIC_MODULE_LIMIT。模塊還必須將他們所有的指令處理函數(shù)加入到指令哈希表中,該過程由函數(shù)ap_add_module_mands完成,代碼如下:static void ap_add_module_mands(module *m, apr_pool_t *p){ apr_pool_t *tpool。 ap_mod_list *mln。 const mand_rec *cmd。 char *dir。 cmd = mcmds。 if (ap_config_hash == NULL) { rebuild_conf_hash(p, 0)。} tpool = apr_hash_pool_get(ap_config_hash)。 while (cmd amp。amp。 cmdname) { mln = apr_palloc(tpool, sizeof(ap_mod_list))。 mlncmd = cmd。 mlnm = m。 dir = apr_pstrdup(tpool, cmdname)。 ap_str_tolower(dir)。 mlnnext = apr_hash_get(ap_config_hash, dir, APR_HASH_ KEY_STRING)。 apr_hash_set(ap_config_hash, dir, APR_HASH_KEY_STRING, mln)。 ++cmd。}}如果指令哈希表不存在,則首先必須構(gòu)建生成該指令哈希表,然后逐一遍歷模塊m中的指令表,并將它們插入到指令哈希表中對應(yīng)的位置。 動態(tài)模塊加載大部分Apache標(biāo)準(zhǔn)模塊都可以通過靜態(tài)編譯鏈接加載執(zhí)行,不過對很多的第三方Apache模塊卻很難實現(xiàn),而這些模塊可以通過Apache的動態(tài)加載機(jī)制實現(xiàn)模塊加載。在分析每個模塊之前,首先要分析的是模塊的數(shù)據(jù)結(jié)構(gòu)及該模塊能夠處理的指令表。對于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 } }。module AP_MODULE_DECLARE_DATA so_module = { STANDARD20_MODULE_STUFF, NULL, /* create perdir config */ NULL, /* merge perdir config */ so_sconf_create, /* server config */ NULL, /* merge server config */ so_cmds, /* mand apr_table_t */ register_hooks /* register hooks */}。.模塊中能夠處理的所有指令都保存在指令表so_cmds中,從中可以看出來,mod_so模塊可以處理的指令只有“LoadModule”和“LoadFile”,相應(yīng)的處理函數(shù)分別為load_module 和load_file。下面我們首先來看load_module函數(shù)的實現(xiàn),該函數(shù)也是模塊裝載處理的入口。static const char *load_module(cmd_parms *cmd, void *dummy, const char *modname, const char *filename)該函數(shù)用來將共享對象載入到服務(wù)器地址空間中。其中,cmd和dummy是所有的指令程序必須有的,由于Apache核心給模塊傳遞相應(yīng)信息。modname是加載模塊的名稱。{ apr_dso_handle_t *modhandle。 apr_dso_handle_sym_t modsym。 module *modp。 const char *szModuleFile = ap_server_root_relative(cmdpool, filename)。 so_server_conf *sconf。 ap_module_symbol_t *modi。 ap_module_symbol_t *modie。 int i。 const char *error。 *(ap_directive_t **)dummy = NULL。 if (!szModuleFile) { return apr_pstrcat(cmdpool, Invalid LoadModule path , filename, NULL)。} sconf = (so_server_conf *)ap_get_module_config(cmdservermodule_config, amp。so_module)。 modie = (ap_module_symbol_t *)sconfloaded_moduleselts。 for (i = 0。 i sconfloaded_modulesnelts。 i++) { modi = amp。modie[i]。 if (modiname != NULL amp。amp。 strcmp(modiname, modname) == 0) { ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, cmdpool, module %s is already loaded, skipping, modname)。 return NULL。} }函數(shù)首先檢查參數(shù)szModuleFile制定的so文件是否存在,如果存在,下一步必須在現(xiàn)有的所有模塊中查找需要載入的模塊是否存在,如果該模塊已載入,則無需做任何處理,否則對其進(jìn)行加載。 for (i = 0。 ap_preloaded_modules[i]。 i++) { const char *preload_name。 apr_size_t preload_len。 apr_size_t thismod_len。 modp = ap_preloaded_modules[i]。 if (memcmp(modpname, mod_, 4)) { continue。} preload_name = modpname + strlen(mod_)。 preload_len = strlen(preload_name) 2。 if (strlen(modname) = strlen(_module)) { continue。} thismod_len = strlen(modname) strlen(_module)。 if (strcmp(modname + thismod_len, _module)) { continue。} if (thismod_len != preload_len) { continue。} if (!memcmp(modname, preload_name, preload_len)) { return apr_pstrcat(cmdpool, module , modname, is builtin and can39。t be loaded, NULL)。} }如果制定的模塊沒有被加載,那么函數(shù)將執(zhí)行加載。對動態(tài)加載模塊檢查完畢后,Apache將檢查靜態(tài)鏈接模塊數(shù)組ap_preloaded_modules。在ap_preloaded_modules數(shù)組中查找指定的模塊相對簡單。對于每一個模塊,要阿Apache認(rèn)定他是一個合法的模塊,就必須符合:(1)Apache必須保證其文件名是以mod_開始的。(2)Apache必須保證其文件名是以_module結(jié)束的。 modi = apr_array_push(sconfloaded_modules)。 modiname = modname。 if (apr_dso_load(amp。modhandle, szModuleFile, cmdpool) != APR_SUCCESS) { char my_error[256]。 return apr_pstrcat(cmdpool, Cannot load , szModuleFile, into server: , apr_dso_error(modhandle, my_error, sizeof(my_error)), NULL)。} ap_log_perror(APLOG_MARK, APLOG_DEBUG, 0, cmdpool, loaded module %s, modname)。 if (apr_dso_sym(amp。modsym, modhandle, modname) != APR_SUCCESS) { char my_error[256]。 return apr_pstrcat(cmdpool, Can39。t locate API module structure `, modname, 39。 in file , szModuleFile, : , apr_dso_error(modhandle, my_error, sizeof(my_error)),
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1