Nginx原始碼完全註釋(9)nginx.c: ngx_get_options
Nginx原始碼完全註釋(9)nginx.c: ngx_get_options
- 作者:柳大·Poechant(鍾超)
- 部落格:Blog.CSDN.net/Poechant
- 郵箱:zhongchao.ustc#gmail.com (# -> @)
- 日期:2012/09/29
本文分析 ngxin.c 中的 ngx_get_options 函式,其影響:
nginx.c 中的:
static ngx_uint_t ngx_show_help;
static ngx_uint_t ngx_show_version;
static ngx_uint_t ngx_show_configure;
static u_char *ngx_prefix;
static u_char *ngx_conf_file;
static u_char *ngx_conf_params;
static char *ngx_signal;
ngx_cycle.c 中的:
ngx_uint_t ngx_test_config;
ngx_uint_t ngx_quiet_mode;
ngx_process_cycle.c(src/os/win32 或 src/os/unix)中的:
ngx_uint_t ngx_process;
這些變數的作用域由 static 限制為 nginx.c 檔案。ngx_get_options 函式如下:
// 傳入的是 main 函式的兩個引數 argc 和 argv
static ngx_int_t
ngx_get_options(int argc, char *const *argv)
{
u_char *p;
ngx_int_t i;
// 對於每一個 argv(注意是從 1 開始,因為 0 是 "nginx")
for (i = 1; i < argc; i++) {
// p 為第 i 個引數的地址
p = (u_char *) argv[i];
//
if (*p++ != '-') {
ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]);
return NGX_ERROR;
}
// 之所以 while 迴圈是因為一個減號可以帶過個引數,比如 -hV
while (*p) {
// 注意 p 被加 1
switch (*p++) {
// 問號和 h 都是顯示幫助資訊和版本資訊
case '?':
case 'h':
ngx_show_version = 1;
ngx_show_help = 1;
break;
// 小 v 顯示版本資訊
case 'v':
ngx_show_version = 1;
break;
// 大 v 顯示版本資訊和配置資訊
case 'V':
ngx_show_version = 1;
ngx_show_configure = 1;
break;
// t 用於測試配置檔案
case 't':
ngx_test_config = 1;
break;
// q 表示安靜模式
case 'q':
ngx_quiet_mode = 1;
break;
// p 為指定 prefix path
case 'p':
if (*p) {
ngx_prefix = p;
goto next;
}
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;
// s 為 signal,即給 Nginx 傳送訊號
case 's':
if (*p) { // 下一個引數緊跟在 -s 後,比如 -sstop
ngx_signal = (char *) p;
} else if (argv[++i]) { // 下一個引數
ngx_signal = argv[i];
} else { // -s 沒有帶引數時
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;
}
幫助資訊如下:
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/nginx/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file
v 版本資訊形式如下:
nginx version: nginx/1.3.5
V 版本資訊如下:
nginx version: nginx/1.3.5
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configure arguments: --with-pcre=/home/michael/packages.d/pcre-8.20 --with-zlib=/home/michael/packages.d/zlib-1.2.7
-
轉載請註明來自柳大·Poechant(鍾超)的CSDN部落格
-
相關文章
- Nginx原始碼完全註釋(6)core/murmurhashNginx原始碼
- Nginx原始碼完全註釋(8)ngx_errno.cNginx原始碼
- Nginx原始碼完全註釋(5)core/ngx_cpuinfo.cNginx原始碼UI
- 原始碼完全註釋:socket select原始碼
- Nginx原始碼完全註釋(1)ngx_alloc.h / ngx_alloc.cNginx原始碼
- Nginx原始碼完全註釋(7)ngx_palloc.h/ngx_palloc.cNginx原始碼
- Nginx原始碼完全註釋(4)ngx_queue.h / ngx_queue.cNginx原始碼
- Nginx原始碼完全註釋(3)ngx_list.h / ngx_list.cNginx原始碼
- Nginx原始碼完全註釋(2)ngx_array.h / ngx_array.cNginx原始碼
- Nginx 原始碼完全剖析(11)ngx_spinlockNginx原始碼
- Nginx 原始碼完全剖析(10)ngx_radix_treeNginx原始碼
- 9個最有趣的程式碼註釋
- 《Linux核心完全註釋》學習筆記:2.7 Linux核心原始碼的目錄結構Linux筆記原始碼
- HashMap原始碼(JDK1.8)-手動註釋HashMap原始碼JDK
- Bootstrap的Model原始碼詳細註釋 (轉)boot原始碼
- Nginx篇--Nginx原始碼搭建Nginx原始碼
- Redux原始碼完全解讀Redux原始碼
- bootstrap-modal.js學習筆記(原始碼註釋)bootJS筆記原始碼
- Dubbo原始碼解析之服務釋出與註冊原始碼
- 從Python原始碼註釋,自動生成API文件Python原始碼API
- 使用ehcache元註釋提高Spring 效能原始碼案例Spring原始碼
- C231n-KNN-assignment1-完全程式碼及註釋KNN
- C231n-SVM-assignment1-完全程式碼及註釋
- nginx原始碼安裝Nginx原始碼
- NGINX原始碼閱讀Nginx原始碼
- Nginx 原始碼安裝Nginx原始碼
- 原始碼安裝Nginx原始碼Nginx
- Nginx的nginx.conf配置檔案中文註釋說明Nginx
- CSS程式碼註釋CSS
- php程式碼註釋PHP
- maven下載原始碼,解決中文註釋為亂碼的問題Maven原始碼
- DialogFragment使用到原始碼完全解析Fragment原始碼
- docker原始碼安裝NginxDocker原始碼Nginx
- macbook 原始碼安裝 nginxMac原始碼Nginx
- Centos原始碼安裝NginxCentOS原始碼Nginx
- ArcGIS VBA - VBA+AO入門15例完全註釋版
- snownlp類庫(中文情感分析)原始碼註釋及使用原始碼
- NumPyCookbook帶註釋原始碼四、連線NumPy與剩餘世界原始碼