nginx之main函数的解读(八)
2014-10-16 16:45
2931 查看
继上次的进度,我们应该看的是ngx_process_options函数了,该函数定义在core文件夹当中的nginx.c文件中
接下来就是
//该函数主要作用是将配置文件的路径,系统运行路径,还有用户输入参数保存在cycle结构体当中 static ngx_int_t ngx_process_options(ngx_cycle_t *cycle) { u_char *p; size_t len; if (ngx_prefix) { //ngx_prefix是用户指定的nginx系统所在目录名称,接下来是检测该路径是否格式正确,并且将该路径放在conf_prefix和prefix当中 //-p之后的命令 len = ngx_strlen(ngx_prefix); p = ngx_prefix; //ngx_path_separator函数定义在/src/os/unix/ngx_files.h当中,该重定义检测p[len-1]是不是字符'/' if (len && !ngx_path_separator(p[len - 1])) { //如果len不是0,而且p[len-1]字符不是'/' // ngx_pnalloc函数定义在/src/core/ngx_palloc.c,返回内存池链中可用数据大小的ngx_pool_t结构体, p = ngx_pnalloc(cycle->pool, len + 1); if (p == NULL) { return NGX_ERROR; } //同时将前缀放在内存池中 ngx_memcpy(p, ngx_prefix, len); p[len++] = '/'; } //将该前缀放在cycle当中 cycle->conf_prefix.len = len; cycle->conf_prefix.data = p; cycle->prefix.len = len; cycle->prefix.data = p; } else { #ifndef NGX_PREFIX //如果用户没有指定nginx路径的话,则查看NGX_PREFIX是否定义了,如果没有定义,则将程序当前运行目录设置成conf_prefix和prefix //从内存池中获得我们需要的内存大小合适的内存 p = ngx_pnalloc(cycle->pool, NGX_MAX_PATH); if (p == NULL) { return NGX_ERROR; } //获得当前工作目录放在内存池当中 if (ngx_getcwd(p, NGX_MAX_PATH) == 0) { ngx_log_stderr(ngx_errno, "[emerg]: " ngx_getcwd_n " failed"); return NGX_ERROR; } len = ngx_strlen(p); p[len++] = '/'; //如果ngx_prefix是空的,那么我们会将当前目录作为启动项 cycle->conf_prefix.len = len; cycle->conf_prefix.data = p; cycle->prefix.len = len; cycle->prefix.data = p; #else #ifdef NGX_CONF_PREFIX //如果用户既未指定运行目录,但是指定了NGX_CONF_PREFIX的话,也定义了NGX_PREFIX,则将conf_prefix设置成NGX_CONF_PREFIX ngx_str_set(&cycle->conf_prefix, NGX_CONF_PREFIX); #else //如果用户没有定义NGX_CONF_PREFIX,但是定义了NGX_PREFIX ngx_str_set(&cycle->conf_prefix, NGX_PREFIX); #endif //用户定义了NGX_PREFIX ngx_str_set(&cycle->prefix, NGX_PREFIX); #endif } if (ngx_conf_file) { //将从用户输入的-c之后的参数中读取到的配置信息保存在cycle->conf_file当中 cycle->conf_file.len = ngx_strlen(ngx_conf_file); cycle->conf_file.data = ngx_conf_file; } else { //如果用户没有指定-c参数,也就是没有指定配置文件路径,则需要将系统默认的NGX_CONF_PATH,默认是在ngx_prefix之后的/conf/nginx.conf文件 ngx_str_set(&cycle->conf_file, NGX_CONF_PATH); } //ngx_conf_full_name函数是定义在/src/core/ngx_conf_file.c if (ngx_conf_full_name(cycle, &cycle->conf_file, 0) != NGX_OK) { return NGX_ERROR; } //执行到此说明cycle->ngx_conf_file已经是绝对路径了 for (p = cycle->conf_file.data + cycle->conf_file.len - 1; p > cycle->conf_file.data; p--) { if (ngx_path_separator(*p)) { //这里截取配置文件所在的目录,如果是"/"字符的话,将路径和文件名称分开 cycle->conf_prefix.len = p - ngx_cycle->conf_file.data + 1; cycle->conf_prefix.data = ngx_cycle->conf_file.data; break; } } if (ngx_conf_params) { //如果用户指定了-g参数则将参数保存下来 cycle->conf_param.len = ngx_strlen(ngx_conf_params); cycle->conf_param.data = ngx_conf_params; } if (ngx_test_config) { //如果用户输入了-t参数,则将cycle->log->log_level设置成NGX_LOG_INFO即可 cycle->log->log_level = NGX_LOG_INFO; } return NGX_OK; }
接下来就是
if (ngx_os_init(log) != NGX_OK) { return 1; }明天继续...
相关文章推荐
- nginx之main函数的解读(六)
- nginx之main函数的解读(四)
- nginx之main函数的解读(一)
- nginx之main函数的解读(三)
- nginx之main函数的解读(七)
- nginx之main函数的解读(五)
- nginx中CPU亲和性源码解读
- nginx源码剖析--从main函数开始
- nginx limit配置参数解读
- Nginx配置优化解读
- nginx配置完全解读
- 解读 nginx 中 chain 和 buf
- 基于 Nginx 的软件负载均衡实现解读 [转自 数据库开发]
- nginx安装及参数解读
- nginx配置文件nginx.conf解读
- FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块
- nginx配置完全解读
- 基于 Nginx 的软件负载均衡实现解读
- nginx源码剖析 从main函数看nginx启动流程
- FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块