Nginx源码分析(一)
2012年3月12日
没有评论
1.错误定义
分析源码从最简单的地方入手,首先来看nginx的错误码定义,代码在ngx_errno.h,ngx_errno.h文件中。一共就两个函数。
- u_char *ngx_strerror(ngx_err_t err, u_char *errstr, size_t size);
- ngx_uint_t ngx_strerror_init(void);
系统启动时会初始化全局变量ngx_sys_errlist,这是一个全局ngx_str_t数组,数组大小为NGX_SYS_NERR,每个元素都一个结构体为:
- typedef struct {
- size_t len;//data成员的大小
- u_char *data;//一个字符串
- } ngx_str_t;
初始化:ngx_uint_t ngx_strerror_init
所以初始化的函数是填充每一个元素,该元素的数组下标即为错误码,元素len成员是指元素data字符串的大小,data是该错误码(数组下标)的文字描述,通过函数strerror(err)来取得错误码的信息串。
获取错误码对应的信息串:ngx_strerror
在ngx_sys_errlist找到err对应位置的错误信息,如果错误码不在数组下标范围则返回未知错误,同时检查传入的长度,太小于将会截断错误信息串。