json 发表于 2015-5-17 01:55:27

学习ngx之ngx_ngx_strerror_init()

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

#define NGX_SYS_NERR    132
#define NGX_OK0                     //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_tlen;
      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_tlen;
      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.len = len;
                ngx_sys_errlist.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.len, ngx_sys_errlist.data);
                }
      }

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




。。。


页: [1]
查看完整版本: 学习ngx之ngx_ngx_strerror_init()