chunpu / blog

personal blog render by jekyll
MIT License
51 stars 8 forks source link

nginx基本数据类型 #21

Open chunpu opened 9 years ago

chunpu commented 9 years ago

我的参考来自这里http://tengine.taobao.org/book/chapter_02.html#id3

ngx_str_t

typedef struct {
    size_t      len;
    u_char     *data;
} ngx_str_t;

声明文件: core/ngx_string.h

最小的数据结构, 就是一个字符串,跟传统以\000来判断字符串结尾不同,ngx_str_t通过长度来判断字符串结尾.这样做有什么好处呢?

ngx_string(str)

// 本质就是

#define ngx_string(str) {sizeof(str) - 1, (u_char *)str}

宏定义,构造函数, 通过一个标准字符串构造出一个nginx字符串.

只能用来初始化.

ngx_str_t str = ngx_string("hello");

// error
ngx_str_t str;
str = ngx_string("hello");

这是因为结构体初始化后不能直接赋值

我实在不理解为何要这么做, 直接写有多打几个字么?可能是c开发者都喜欢建立自己的世界观吧.

ngx_null_string

宏定义ngx_str_t空字符串,也就是{0, NULL}

ngx_str_set(&str, text);

// ---

define ngx_str_set(&str, text) str->len = sizeof(text) - 1; str->data = (u_char *)text

此为宏定义,str为ngx_str_t的指针, 用法是把标准字符串赋值给ngx_str_t这个str指针.

这个text是常量字符串,而不是指针,否则len永远是3.

然后ngx就提供了很多ngx前缀的字符串方法.比如ngx_atoi, ngx_strcmp等, 不知道这样重复造轮子有啥真正的好处..