nginx源码学习——命令行选项处理
来源:互联网 发布:佛教的软件 编辑:程序博客网 时间:2024/05/22 15:26
2015-05-12 wcdj
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_tngx_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;}
0 0
- nginx源码学习——命令行选项处理
- nginx源码学习——错误处理
- 学习笔记——Maven 命令行选项
- nginx 源码学习——处理stale event
- Main():处理命令行选项
- 处理命令行选项
- Main():处理命令行选项
- 命令行选项的处理
- main:处理命令行选项
- main();处理命令行选项
- main处理命令行选项
- 命令行选项的处理
- main :处理命令行选项
- Nginx源码分析——日志处理
- MFC学习笔记(二)处理命令行选项
- CCF——命令行选项
- shell 命令行选项、参数处理
- getopt:命令行选项、参数处理
- noip 2004 合并果子
- ubuntu14.04中的tmp文件夹生命周期
- Java学习路线图·影响一代又一代程序员的经典书籍!
- java选择排序
- TJOI2015Day1测试总结
- nginx源码学习——命令行选项处理
- OC和Swift混编(惊喜!)
- 登录、注册页面及后台代码
- java基础——java中的异常
- c++中BOOL和bool的区别
- Android实现网络多线程断点续传下载
- JavaScript Notes 1
- 算法导论 15章 动态规划
- php-fpm 启动参数及重要配置详解