首頁  >  文章  >  後端開發  >  [nginx源碼分析]主函數解析

[nginx源碼分析]主函數解析

WBOY
WBOY原創
2016-08-08 09:24:52894瀏覽

ngx_strerror_init

         函數主要是先把錯誤訊息保存在ngx_sys_errlist數組裡面,做一個errno->errmsg調用數組,當系統發生錯誤時候,直接就可以透過errnoerrnoerrmsg,減少apiapi。

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

         透過加鎖解鎖,來更新下列何者       主要設定兩個pcre全域的分配與回收函數

         ngx_pid = getpid();/ /取得主程序pid

         ngx_log_init(ngx_prefix)

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_log


#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_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/

ngx_crc32_table_init()//初始化crc表

//設定每個模組的模組索引

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;
}

然後分析設定解析

ngx_init_cycl()

以上就介紹了[nginx原始碼分析]主函數解析,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn