在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 ****也理所当然。
而evnents是个MAIN_CONF(关于什么是MAIN_CONF,自己去查查这里就不说了),所以在解析时(即ngx_conf_handler),取到该index所在位置的地址:
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 *,那么只是在实际使用者,根据需要时候来做类型强转,在其他的地方,看不出它的层次。
以上是我个人的理解,有其他见解的朋友欢迎一起讨论。
分享到:
相关推荐
同时在网站SEO中,后者也比前者的权重更高。 基本知识 顶级域名:.com .cn 二级域名:baidu.com sina.com ,这其中baidu 和sina就是二级域名 三级域名:zhidao.baidu.com 其中zhidao就是三级域名 基本步骤 设置地址...
Nginx配置文件——一级域名、二级域名
Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写[文].pdf
Nginx 中文官方手册.CHM
如果反向代理配置如下,那么不需要下载查看了。 http://127.0.0.1:3000 => http://ip或域名:端口 这个教程针对特殊情况,需配置访问二级路径的。 http://127.0.0.1:3000 => http://ip或域名:端口/yapi
轻量级HTTP服务器Nginx.chm Nginx中文手册
nginx官方文档中文版
nginx 离线安装包nginx 离线安装包
nginx中文文档。几次下载都发现不是nginx中文文档,只好自己做一个PDF。内容来源:http://tengine.taobao.org/nginx_docs/cn/
Nginx中http请求处理过程 有不少地方不是很明白 ,还望大家共同交流
Nginx安装包Nginx安装包
nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源
nginx四层代理测试 及SLB负载均衡功能配置测试
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx 可以在...
其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx全能指南是一本介绍Nginx服务器的书,首先,简要介绍Nginx的基本概念和作用,如反向代理、负载均衡等。然后,列举...
第1章 Nginx简介 第2章 Nginx服务器的安装与配置 第3章 Nginx的基本配置与优化 第4章 Nginx与PHP(FastCGI)的安装、配置与优化 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置
书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识...
这是个人工作中总结的一些企业级应用Nginx配置的案例,供各位Nginx学习中参考使用!
├──06-安装部署-Nginx四个发型版本简单介绍.mp4 75.58M ├──07-安装部署-Nginx在centos7中编译安装成系统服务.mp4 344.84M ├──08-基本使用-Nginx的目录结构 在线编辑默认页.mp4 109.11M ├──09-基本使用-...
nginx.conf nginx-1.20.1.tar.gz 这是关于centos8的nginx 和nginx 的配置https文件