ホームページ >バックエンド開発 >PHPチュートリアル >【nginxソースコード解析】メイン関数解析

【nginxソースコード解析】メイン関数解析

WBOY
WBOYオリジナル
2016-08-08 09:24:52952ブラウズ

ngx_strerror_init

主な機能は、まずエラー情報を ngx_sys_errlist 配列に保存し、errno->errmsg のマッピング配列を作成することで、システムでエラーが発生したときに、errno を通じて errmsg を直接見つけることができるため、API 呼び出しが削減されます。

ngx_get_options(argc, argv)

この関数は主にユーザー入力に基づいていくつかのフラグ変数を設定し、ユーザーが入力したパラメーターを保存します。


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)
xngx_time_init-> ngx_time_update

次の時刻を更新します

Rreee

ngx_regex_init ()

主に 2 つの PCRE グローバル割り当て関数とリサイクル関数を設定します

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

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_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 までご連絡ください。