nginx源码学习——命令行选项处理
2015-05-12 21:56
746 查看
2015-05-12 wcdj
nginx的选项处理主要在ngx_get_options函数中完成。
nginx命令行参数的处理方法与典型*NIX环境下的命令行工具用法相同,一些备注可见代码注释。
nginx的选项处理主要在ngx_get_options函数中完成。
static ngx_int_t ngx_get_options(int argc, char *const *argv);
if (ngx_get_options(argc, argv) != NGX_OK) { return 1; }
nginx命令行参数的处理方法与典型*NIX环境下的命令行工具用法相同,一些备注可见代码注释。
static ngx_int_t ngx_get_options(int argc, char *const *argv) { u_char *p; ngx_int_t i; // 跳过argv[0]程序名处理后面的参数 for (i = 1; i < argc; i++) { // 处理每一个选项的指针p p = (u_char *) argv[i]; // 每一个参数都必须以'-'开始 if (*p++ != '-') { ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]); return NGX_ERROR; } // 开始解析'-'符号后面的字符, 允许连续多个字符, 例如, -abc... while (*p) { // 根据选项设置各种标记变量 switch (*p++) { case '?': case 'h': ngx_show_version = 1; ngx_show_help = 1; break; case 'v': ngx_show_version = 1; break; case 'V': ngx_show_version = 1; ngx_show_configure = 1; break; case 't': ngx_test_config = 1; break; case 'q': ngx_quiet_mode = 1; break; case 'p': // 字符p后面紧接着value, 即p后面没有空格 if (*p) { ngx_prefix = p; goto next; } // 否则, p后面有空格, 即下一个参数作为p的value if (argv[++i]) { ngx_prefix = (u_char *) argv[i]; goto next; } ngx_log_stderr(0, "option \"-p\" requires directory name"); return NGX_ERROR; case 'c': // 同上 if (*p) { ngx_conf_file = p; goto next; } if (argv[++i]) { ngx_conf_file = (u_char *) argv[i]; goto next; } ngx_log_stderr(0, "option \"-c\" requires file name"); return NGX_ERROR; case 'g': // 同上 if (*p) { ngx_conf_params = p; goto next; } if (argv[++i]) { ngx_conf_params = (u_char *) argv[i]; goto next; } ngx_log_stderr(0, "option \"-g\" requires parameter"); return NGX_ERROR; case 's': // 同上 if (*p) { ngx_signal = (char *) p; } else if (argv[++i]) { ngx_signal = argv[i]; } else { ngx_log_stderr(0, "option \"-s\" requires parameter"); return NGX_ERROR; } if (ngx_strcmp(ngx_signal, "stop") == 0 || ngx_strcmp(ngx_signal, "quit") == 0 || ngx_strcmp(ngx_signal, "reopen") == 0 || ngx_strcmp(ngx_signal, "reload") == 0) { ngx_process = NGX_PROCESS_SIGNALLER; goto next; } ngx_log_stderr(0, "invalid option: \"-s %s\"", ngx_signal); return NGX_ERROR; default: ngx_log_stderr(0, "invalid option: \"%c\"", *(p - 1)); return NGX_ERROR; } } next: continue; } return NGX_OK; }
相关文章推荐
- 【C++基础学习】C++ main():处理命令行选项
- MFC学习笔记(二)处理命令行选项
- nginx源码学习——错误处理
- nginx 源码学习——处理stale event
- DICOM医学图形处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求(续)
- [转载]Nginx源码学习之编译、构建与安装(cygwin环境)
- [学习总结]6、Android异步消息处理机制完全解析,带你从源码的角度彻底理解
- nginx 源码学习笔记(二十一)—— event 模块(二) ——事件驱动核心ngx_process_events_and_timers
- nginx源码学习1 ngx_queue
- Nginx源码剖析--HTTP请求的分阶段处理的初始化
- Python getopt模块处理命令行选项实例
- nginx 源码学习笔记(九)——基本容器——queue
- Nginx学习之十一-Nginx启动框架处理流程
- 【OpenCV图像处理入门学习教程一】OpenCV2 + 3的安装教程与VS2013的开发环境配置 + JPEG压缩源码分析与取反运算修改
- Bash Shell中命令行选项/参数处理
- (三)Netty源码学习笔记之boss线程处理流程
- nginx 源码学习笔记(十七)—— ngx_worker_process_cycle子进程执行
- nginx源码分析--多阶段请求处理
- nginx-从源码开始学习
- nginx源码学习(五)