全局变量实际定义在nginx_cycle.c中
nginx_cycle.c
// 命令行需要的全局参数
volatile ngx_cycle_t *ngx_cycle;
ngx_array_t ngx_old_cycles;
static ngx_pool_t *ngx_temp_pool;
static ngx_event_t ngx_cleaner_event;
ngx_uint_t ngx_test_config;
ngx_uint_t ngx_quiet_mode;
ngx_uint_t ngx_show_modules;
ngx_uint_t ngx_show_directives;
其他的文件想要引用这些全局变量,需在文件内定义extern,如果每个文件都定义比较麻烦,因此nginx将这几个放在nginx_cycle.h中。
nginx_cycle.h
extern volatile ngx_cycle_t *ngx_cycle;
extern ngx_array_t ngx_old_cycles;
extern ngx_module_t ngx_core_module;
extern ngx_uint_t ngx_test_config;
extern ngx_uint_t ngx_show_modules;
extern ngx_uint_t ngx_show_directives;
extern ngx_uint_t ngx_quiet_mode;
nginx_cycle.h不是使用这些全局变量的位置,真正的位置是众多的.c 文件,而这些变量是通过nginx_cycle.h的被include所实现的。
nginx_core.h
#include <ngx_cycle.h>
core.h被大多数C文件引入。