慢读nginx(1)strerror

来源:互联网 发布:淘宝分销代销的区别 编辑:程序博客网 时间:2024/05/22 08:19

strerror是获取错误码对应的错误字符串的工具,nginx为了提高效率,把错误码和对应的描述保存在了静态的表里面,使用的时候,只需用到访问数据下标,就能快速读取到错误码信息。

nginx系统初始化之后,第一件事就是初始化strerror。首先初始化了一个static的指针指向了一块大小为NGX_SYS_NERR*seizeof(ngx_str_t)的内存。

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

ngx_str_t这个结构,是由长度和指向该长度的数据的指针组成的。

    for (err = 0; err < NGX_SYS_NERR; err++) {        msg = strerror(err);        len = ngx_strlen(msg);        p = malloc(len);        if (p == NULL) {            goto failed;        }        ngx_memcpy(p, msg, len);        ngx_sys_errlist[err].len = len;        ngx_sys_errlist[err].data = p;    }

然后遍历strerror的值,并把该error的值和对应的字符串信息保存进ngx_sys_errlist.

使用的时候,根据读取信息的只在数据里面查找到对应的字符串指针。


ps:看了几篇ngint的相关blog之类,都说nginx尽量减少使用内存copy,从这里也能看出来一斑。

初始化一次,然后尽量引用这个初始化的信息。

0 0
原创粉丝点击