nginx模块编程学习笔记3–模块主要数据结构
2012-12-03 10:15
134 查看
在nginx模块编写种主要会涉及到下面3个数据结构,这一篇我就先来看看这3个数据结构的作用和意义。
ngx_command_t
ngx_module_t
ngx_http_module_t
前面这两个是定义在这个文件中:src/core/ngx_core.h
typedef struct ngx_module_s ngx_module_t;
typedef struct ngx_command_s ngx_command_t;
两个结构体是在这个文件中定义的:src/core/ngx_conf_file.h
先看:ngx_command_s 这个结构体是用来保存组织配置文件中各个配置字段的。
struct ngx_command_s {
ngx_str_t name; //配置字段名称
ngx_uint_t type; //类型和作用范围
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); //设置或是读取函数
ngx_uint_t conf; //配置域
ngx_uint_t offset; //配置字段在配置结构体种的偏移量
void *post; //暂时不知道做什么用
};
这里要提到的主要又这几个字段:type,set,conf,offset
type是标示这个配置字段的作用范围和参数设置,如:NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
这些宏是在src/http/ngx_http_config.h中定义的,首先nginx的配置文件的作用域又三个:main,server,local,分别指全局配置域,虚拟server配置域和localtion作用域,由大而小,所以在这里指定。
这里指定的还有一个就是这个配置字段有几个参数:
#define NGX_CONF_NOARGS 0×00000001 //没有参数
#define NGX_CONF_TAKE1 0×00000002 //一个参数
。。。。
#define NGX_CONF_TAKE7 0×00000080 //7个参数
#define NGX_CONF_MAX_ARGS 8 //最大参数个数
set是一个函数指针,它主要从配置种返回这个命令字段的配置参数:
nginx系统提供了一些常用的设置函数
ngx_conf_set_flag_slot:针对于on和off这种标志处理
ngx_conf_set_str_slot: 对一般的字符串配置
ngx_conf_set_str_array_slot:对多参数处理
ngx_conf_set_keyval_slot:对于key-value类型参数处理
ngx_conf_set_num_slot:针对数字配置处理
这里还有好多,很多都没怎么用过
conf是nginx整体配置域的一个偏移量:
它的取值只有这样3个:
src/http/ngx_http_config.h
#define NGX_HTTP_MAIN_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, main_conf)
#define NGX_HTTP_SRV_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, srv_conf)
#define NGX_HTTP_LOC_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, loc_conf)
ngx_http_conf_ctx_t结构体是这样的,
typedef struct {
void **main_conf;
void **srv_conf;
void **loc_conf;
} ngx_http_conf_ctx_t;
这里的offsetof的一个gcc的一个宏,用来获取结构体内字段在结构体内的偏移量,和之前内核种常见的conten_of是一样的。原理:
#define offsetof(s, m) (size_t)&(((s *)0)->m)
offset是配置字段在配置结构体中的偏移量:
例如我定义了这样一个配置段结构体:
typedef struct {
ngx_str_t xlog_redis;
} ngx_log_redis_loc_conf_t;
那这里对xlog_redis配置的offset值就是offsetof(ngx_log_redis_loc_conf_t, xlog_redis)
ngx_command_t
ngx_module_t
ngx_http_module_t
前面这两个是定义在这个文件中:src/core/ngx_core.h
typedef struct ngx_module_s ngx_module_t;
typedef struct ngx_command_s ngx_command_t;
两个结构体是在这个文件中定义的:src/core/ngx_conf_file.h
先看:ngx_command_s 这个结构体是用来保存组织配置文件中各个配置字段的。
struct ngx_command_s {
ngx_str_t name; //配置字段名称
ngx_uint_t type; //类型和作用范围
char *(*set)(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); //设置或是读取函数
ngx_uint_t conf; //配置域
ngx_uint_t offset; //配置字段在配置结构体种的偏移量
void *post; //暂时不知道做什么用
};
这里要提到的主要又这几个字段:type,set,conf,offset
type是标示这个配置字段的作用范围和参数设置,如:NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
这些宏是在src/http/ngx_http_config.h中定义的,首先nginx的配置文件的作用域又三个:main,server,local,分别指全局配置域,虚拟server配置域和localtion作用域,由大而小,所以在这里指定。
这里指定的还有一个就是这个配置字段有几个参数:
#define NGX_CONF_NOARGS 0×00000001 //没有参数
#define NGX_CONF_TAKE1 0×00000002 //一个参数
。。。。
#define NGX_CONF_TAKE7 0×00000080 //7个参数
#define NGX_CONF_MAX_ARGS 8 //最大参数个数
set是一个函数指针,它主要从配置种返回这个命令字段的配置参数:
nginx系统提供了一些常用的设置函数
ngx_conf_set_flag_slot:针对于on和off这种标志处理
ngx_conf_set_str_slot: 对一般的字符串配置
ngx_conf_set_str_array_slot:对多参数处理
ngx_conf_set_keyval_slot:对于key-value类型参数处理
ngx_conf_set_num_slot:针对数字配置处理
这里还有好多,很多都没怎么用过
conf是nginx整体配置域的一个偏移量:
它的取值只有这样3个:
src/http/ngx_http_config.h
#define NGX_HTTP_MAIN_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, main_conf)
#define NGX_HTTP_SRV_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, srv_conf)
#define NGX_HTTP_LOC_CONF_OFFSET offsetof(ngx_http_conf_ctx_t, loc_conf)
ngx_http_conf_ctx_t结构体是这样的,
typedef struct {
void **main_conf;
void **srv_conf;
void **loc_conf;
} ngx_http_conf_ctx_t;
这里的offsetof的一个gcc的一个宏,用来获取结构体内字段在结构体内的偏移量,和之前内核种常见的conten_of是一样的。原理:
#define offsetof(s, m) (size_t)&(((s *)0)->m)
offset是配置字段在配置结构体中的偏移量:
例如我定义了这样一个配置段结构体:
typedef struct {
ngx_str_t xlog_redis;
} ngx_log_redis_loc_conf_t;
那这里对xlog_redis配置的offset值就是offsetof(ngx_log_redis_loc_conf_t, xlog_redis)
相关文章推荐
- Nand Flash管理算法介绍之主要模块介绍
- MM 模块主要 T-CODE 和主要使用的表
- python的scikit-learn的主要模块和基本使用
- 国内主要的PDM产品关于浏览圈阅模块的总结(2006)
- 设备驱动主要数据结构
- GCC主要数据结构之attribute_spec
- GCC主要数据结构之stmt_tree_s
- OM模块主要API示例
- Python之架构 语法 数据结构 内置模块 标准库等概览
- linux内核主要模块图
- 内核驱动主要数据结构
- FFMpeg主要数据结构
- HI3518C 的主要模块
- Nand Flash管理算法介绍之主要模块介绍
- ffmpeg 几个主要数据结构
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
- Android Fresco主要模块和特性
- 微擎使用 manifest.xml 来描述模块的主要功能和配置参数
- linux下,USB四大主要数据结构
- Python中的堆数据结构——heap模块