[nginx源码分析]主函数解析
函数主要是先把错误信息保存在ngx_sys_errlist数组里面,做一个errno->errmsg的映射数组,当系统发生错误时候,直接就可以通过errno找到errmsg,减少api调用。
ngx_get_options(argc, argv)
这个函数主要是根据用户的输入设置一些旗变量and保存用户输入的参数。
Param flag ?/h ngx_show_version=1/ngx_show_help=1 v ngx_show_version=1 V ngx_show_version=1/ngx_show_configure=1 t ngx_test_config=1 q ngx_quiet_mode=1 p ngx_prefix=argv[index]支持-p/home/work/nginx or –p /home/work/nginx c ngx_conf_file=p支持方式同上 g ngx_conf_param=p 支持方式同上 s ngx_signal=p/ngx_process=NGX_PROCESS_SIGNALLER(stop、quit、reopen、reload)
ngx_time_init->ngx_time_update
通过加锁和解锁,来更新如下时间
variable format ngx_cached_time = tp; ngx_cached_http_time.data = p0; “Mon, 28 Sep 1970 06:00:00 GMT” ngx_cached_err_log_time.data = p1; “1970/09/28 12:00:00” ngx_cached_http_log_time.data = p2; “28/Sep/1970:12:00:00 +0600” ngx_cached_http_log_iso8601.data = p3 “1970-09-28T12:00:00+06:00”
ngx_regex_init()
主要设置两个pcre全局的分配和回收函数
ngx_pid = getpid();//获取主进程pid
ngx_log_init(ngx_prefix)#if (NGX_WIN32) if (name[1] != ':') { #else if (name[0] != '/') { #endif if (prefix) { plen = ngx_strlen(prefix);//如果用户输入了-p prefix } else { #ifdef NGX_PREFIX prefix = (u_char *) NGX_PREFIX;//用户没输入,使用configure路径 plen = ngx_strlen(prefix); #else plen = 0; #endif } if (plen) { name = malloc(plen + nlen + 2); if (name == NULL) { return NULL; } p = ngx_cpymem(name, prefix, plen);//copy prefix if (!ngx_path_separator(*(p - 1))) { *p++ = '/'; } ngx_cpystrn(p, (u_char *) NGX_ERROR_LOG_PATH, nlen + 1);//copy path p = name; } }
最后返回值和函数构造的ngx_log
ngx_log { ngx_log.file = &ngx_log_file; { ngx_fd_t fd;//打开的错误日志 ngx_str_t name;//未设置 u_char *buffer;//未设置 u_char *pos;//未设置 u_char *last;//未设置 } log_level = NGX_LOG_NOTICE; }
init_cycle.pool = ngx_create_pool(1024, log);//分配一块内存池节点,具体的内存池,可
详见内存池分析文档
ngx_save_argv
函数把用户输入的参数保存在ngx_argv数组里面去
ngx_process_options
这个函数主要是处理用户输入的参数,配置文件、测试配置文件、
conf_file =/home/work/hunter/nginx/nginx_gdb/conf/nginx.conf
conf_prefix =/home/work/hunter/nginx/nginx_gdb/conf
prefix =/home/work/hunter/nginx/nginx_gdb
ngx_crc32_table_init()//初始化crc表
//设置每一个模块的模块索引
ngx_max_module = 0; for (i = 0; ngx_modules[i]; i++) { ngx_modules[i]->index = ngx_max_module++; }
然后分析配置解析
ngx_init_cycl()
以上就介绍了[nginx源码分析]主函数解析,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
上一篇: 网页框架怎么弄
下一篇: 关于php内存释放问题
推荐阅读
-
SpringBoot 源码解析 (六)----- Spring Boot的核心能力 - 内置Servlet容器源码分析(Tomcat)
-
Tomcat源码分析三:Tomcat启动加载过程(一)的源码解析
-
imutils库源码解析,看他如何调用opencv基本函数
-
PHP strtotime函数用法、实现原理和源码分析
-
Mybaits 源码解析 (九)----- 全网最详细,没有之一:一级缓存和二级缓存源码分析
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
jQuery 源码分析(四) each函数 $.each和$.fn.each方法 详解
-
持久层Mybatis3底层源码分析,原理解析
-
Vue 源码分析——构造函数原型
-
nginx源码分析线程池详解