在nginx中有個四級指標,void ****conf_ctx,那麼這個四級的指標在什麼情況下用到呢?
答案可以在events block中找到。
在處理events這個指令時,它在conf_ctx中某個地方佔住乙個位置(指標看成陣列),以index代表此處的下標。
在ngx_events_block函式中,先會申請乙個指標,即**中的ctx:
ctx = ngx_pcalloc(cf->pool, sizeof(void *));
這個指標後面就會放到index下標處。那麼這個指標ctx,指向的是什麼呢?那是個陣列,各種event的配置的結構指標陣列,從c語言上看,假設我們用乙個void **tmp的二級指標來指向這個陣列:
tmp = ngx_pcalloc(cf->pool, ngx_event_max_module * sizeof(void *));
*ctx = tmp;
我們看到此時ctx就是乙個指向二級指標的指標,即void ***,而這個ctx又是conf_ctx的乙個成員,很顯然,conf_ctx被冠以void ****也理所當然。
conf = &(((void **) cf->ctx)[ngx_modules[i]->index])
這個conf,通過後面:
cmd->set(cf, cmd, conf);
即呼叫ngx_events_block時,通過:
*(void **) conf = ctx;
完成了index位置上面指標的放置,這個有c語言基礎的同學都知道的,在函式內部給外面指標引數賦值的原理。
現在的問題是為什麼非要用void ****,void *不可以嗎?從語言層面來說,是可以的。我個人認為,把指標層次寫全,對使用者(或者是**邏輯上層)來說,容易看到它的指向和層次。而寫成void *,那麼只是在實際使用者,根據需要時候來做型別強轉,在其他的地方,看不出它的層次。
以上是我個人的理解,有其他見解的朋友歡迎一起討論。
nginx中的四級指標 詳解
ctx是個一級指標,以及指標又指向了內部的 三個並列的 二級指標,所以ctx這裡可以理解為 指標.在nginx中有個四級指標,void conf ctx,那麼這個四級的指標在什麼情況下用到呢?答案可以在events block中找到。在處理events這個指令時,它在conf ctx中某個地方佔住乙...
嚴謹的四級安全控制體系
嚴謹的四級安全控制體系 金和軟體 平台的4層安全體系層層防護 六種復合認證方式保障登入安全 口令認證 asp.net 配置為使用窗體身份驗證,iis配置為匿名訪問,系統將根據資料儲存 資料庫 對呼叫者提供的憑證進行身份驗證 使用 html 窗體 口令認證採用md5加密演算法,128位金鑰加密確保系統...
防禦針對Linux伺服器的四級攻擊
原貼 http www.e gov.org.cn wangluoanquan news004 200709 72087.html 防禦針對linux伺服器的四級攻擊 隨著linux企業應用的擴充套件,有大量的網路伺服器使用linux作業系統。linux伺服器的安全效能受到越來越多的關注,這裡根據li...