近来想拜读一下优秀的开源代码设计,之前也阅读过qt以及opencv的源码,不过学习nginx源码的目的是想试着用设计模式以及C++的思想来封装一次nginx的源码,但是第一步还得好好熟悉一下nginx,大师们都说过,最好的办法就是看源码,万能的开源。
- ngx_str_t定义
ngx_str_t是nginx中定义的类似于字符串的结构,其中包含了字符串的长度(不包含终止字符'\0')以及字符串的首地址,数据结构定义如下:
typedef struct {
size_t len;
u_char *data;
} ngx_str_t;
细心的人都会觉得,以首地址的方式指向一块内存,如果在改变ngx_str_t定义的字符串的时候,可能会出错。因为它指向的是一块内存的首地址,如果改变字符串内容,有可能使得指向内存的区域进入到别的字符串的区域,这样就会出现差错。所以,对于ngx_str_t最好的方式是以只读的方式进行。
- 操作函数
1、初始化或赋值函数
#define ngx_string(str) { sizeof(str) - 1, (u_char *) str }
#define ngx_null_string { 0, NULL }
#define ngx_str_set(str, text) \
(str)->len = sizeof(text) - 1; (str)->data = (u_char *) text
#define ngx_str_null(str) (str)->len = 0; (str)->data = NULL