[nginx源码分析]主函数解析

WBOY
Freigeben: 2016-08-08 09:24:52
Original
892 Leute haben es durchsucht

ngx_strerror_init

         函数主要是先把错误信息保存在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)
Nach dem Login kopieren

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”
Nach dem Login kopieren

         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;
         }
     }
Nach dem Login kopieren

最后返回值和函数构造的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;
}
Nach dem Login kopieren

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++;
}
Nach dem Login kopieren

然后分析配置解析

ngx_init_cycl()


以上就介绍了[nginx源码分析]主函数解析,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!