ngx_string.h提供了一些操作字符串的函数,现总结如下:
#define ngx_string(str) { sizeof(str) - 1, (u_char *) str }
把以\0结束的字符串转换为ngx_str_t类型
#define ngx_null_string { 0, NULL }
可以把一个ngx_str_t类型的变量赋为空
#define ngx_str_set(str, text) (str)->len = sizeof(text) - 1; (str)->data = (u_char *) text
把text赋给str
#define ngx_str_null(str) (str)->len = 0; (str)->data = NULL
把str赋空
#define ngx_toupper(c) (u_char) ((c >= 'a' && c <= 'z') ? (c & ~0x20) : c)
把c变成对应的大写字母
#define ngx_tolower(c) (u_char) ((c >= 'A' && c <= 'Z') ? (c | 0x20) : c)
把c变成对应的小写字母
void ngx_strlow(u_char *dst, u_char *src, size_t n);
把src里面的前n个字符变成对应的小写放在dst里面
#define ngx_strncmp(s1, s2, n) strncmp((const char *) s1, (const char *) s2, n)
比较s1,s2前n个字符
#define ngx_strcmp(s1, s2) strcmp((const char *) s1, (const char *) s2)
比较s1,s2
#define ngx_strstr(s1, s2) strstr((const char *) s1, (const char *) s2)
找到s2第一次出现在s1的位置
#define ngx_strlen(s) strlen((const char *) s)
计算s长度
#define ngx_strchr(s1, c) strchr((const char *) s1, (int) c)
找到c在s1中出现的第一次的位置
static ngx_inline u_char * ngx_strlchr(u_char *p, u_char *last, u_char c)
在以p开头,以last结尾的字符串中,找到c第一次出现的位置,只比较到last对应的前一个位置。
#define ngx_memzero(buf, n) (void) memset(buf, 0, n)
把buf开头的前n个字符置为0
#define ngx_memset(buf, c, n) (void) memset(buf, c, n)
把buf开头的前n个字符置为c
#define ngx_cpymem(dst, src, n) (((u_char *) memcpy(dst, src, n)) + (n))
和memcpy不同的在于,返回dst+n
u_char *ngx_cpystrn(u_char *dst, u_char *src, size_t n);
把src的前n个字符拷贝到dst中,在前n个字符中遇到\0结束
u_char *ngx_pstrdup(ngx_pool_t *pool, ngx_str_t *src);
把src的数据拷贝到pool中,返回首地址
ngx_strcasecmp(u_char *s1, u_char *s2);
比较两个字符串,不区分大小写,相等返回0
ngx_int_t ngx_strncasecmp(u_char *s1, u_char *s2, size_t n);
比较两个字符串的前n个字符
u_char *ngx_strnstr(u_char *s1, char *s2, size_t n);
判断s2是否在s1里面,区分大小写,如果s1的前n个字符中(s1最多挪动n次)没有能匹配到的,则返回NULL
u_char * ngx_strstrn(u_char *s1, char *s2, size_t n)
该函数是判断s2是否在s1里面,区分大小写,如果在,返回s2在s1的位置指针,其中n为strlen(s2)-1
u_char * ngx_strcasestrn(u_char *s1, char *s2, size_t n)
该函数是判断s2是否在s1里面,不区分大小写,如果在,返回s2在s1的位置指针,其中n为strlen(s2)-1
u_char * ngx_strlcasestrn(u_char *s1, u_char *last, u_char *s2, size_t n)
该函数是判断s2是否在以s1开始以last结束的字符串里面,不区分大小写,如果在,返回s2在以s1开始以last结束的字符串的位置,其中n为strlen(s2)-1
ngx_int_t ngx_rstrncmp(u_char *s1, u_char *s2, size_t n);
比较s1和s2的前n个字符,区分大小写,相等返回0,如果n为0,也返回0
ngx_int_t ngx_rstrncasecmp(u_char *s1, u_char *s2, size_t n);
比较s1和s2的前n个字符,不区分大小写,相等返回0,如果n为0,也返回0
ngx_int_t ngx_memn2cmp(u_char *s1, u_char *s2, size_t n1, size_t n2);
s1的前n1个和s2的前n2个字符比较
ngx_int_t ngx_dns_strcmp(u_char *s1, u_char *s2);
这个函数没有看懂
ngx_int_t ngx_filename_cmp(u_char *s1, u_char *s2, size_t n);
也没有太懂