鱼C论坛

 找回密码
 立即注册
查看: 1468|回复: 0

[技术交流] 学习ngx之ngx_ngx_strerror_init()

[复制链接]
发表于 2015-5-17 01:55:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define NGX_SYS_NERR    132
#define NGX_OK  0                       //src/core/ngx_core.h:36
#define NGX_ERROR       -1                      //src/core/ngx_core.h:37
#define ngx_strlen(s)   strlen((const char *) s)        //src/core/ngx_string:61



typedef unsigned char u_char;

typedef int     ngx_err_t;                              //src/os/unix/ngx_errno.h:16


typedef struct {                                        //src/core/ngx_string.h:16
        size_t  len;
        u_char  *data;
} ngx_str_t;


static ngx_str_t        *ngx_sys_errlist;       //src/os/unix/ngx_errno.h:28


void *                                  //src/core/ngx_string.h:1965 
ngx_memcpy(void *dst, const void *src, size_t n) {
//      if (n > NGX_MEMCPY_LIMIT) {
//              ngx_log_error(NGX_LOG_ALETER, ngx_cycle->log, 0, "memcpy %uz bytes", n);
//              ngx_debug_point();
//      }

        return memcpy(dst, src, n);
}



int
ngx_strerror_init(void) {
        char    *msg;
        u_char  *p;
        size_t  len;
        ngx_err_t       err;

        len = NGX_SYS_NERR * sizeof(ngx_str_t);

        ngx_sys_errlist = malloc(len);

        if (ngx_sys_errlist == NULL) {
                goto failed;
        }

        for ( err = 0; err < NGX_SYS_NERR; err++) {
                msg = strerror(err);    // get error infor from number by using system function strerror()
                len = ngx_strlen(msg);

                p = malloc(len);                //get a memory for current error string by use malloc(), which return a char pointer
                if( p == NULL ) {
                        goto failed;
                }

                ngx_memcpy(p, msg, len);
                ngx_sys_errlist[err].len = len;
                ngx_sys_errlist[err].data = p;
        }

        return NGX_OK;

failed:
//      err = errno;
//      ngx_log_stderr(0, "malloc(%uz) failed (%d: %s)", len, err, strerror(err));

        return NGX_ERROR;
}




int
main(int argc, char ** argv) {

        //call the ngx_strerror_init() function to get the table of ngx_sys_errlist
        if (ngx_strerror_init() == NGX_OK) {
                int i;
                for (i = 0; i < NGX_SYS_NERR; i++) {
                        printf("%d\t%d\t%s\n", i, ngx_sys_errlist[i].len, ngx_sys_errlist[i].data);
                }
        }

        return 0;
}
因为只先考虑了函数实现,但是这之中的日志处理,暂时将其注释了,,,还有待研究研究。。。唉,,,必须努力啊




。。。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表