Nginx ngx_log_stderr源码分析(上)

//ngx_err_t 代表错误的个数  const char * fmt格式字符串,有着格式信息
//typedef int         ngx_err_t;//代表错误的个数
//... 代表可变参数

void ngx_log_stderr(ngx_err_t err, const char *fmt, ...)
{
	//其实代表字符时 char 和 uchar 没有区别,*p 代表写入头指针
    u_char   *p, *last;
    va_list   args;//即 ...
    u_char    errstr[NGX_MAX_ERROR_STR];//结果 #define NGX_MAX_ERROR_STR   2048 2048Bytes

    last = errstr + NGX_MAX_ERROR_STR;//尾边界 不包含
    //内存操作宏定义
// #define ngx_cpymem(dst, src, n)   (((u_char *) memcpy(dst, src, n)) + (n))
// #define ngx_memzero(buf, n)       (void) memset(buf, 0, n)
// #define ngx_memset(buf, c, n)     (void) memset(buf, c, n)

    p = ngx_cpymem(errstr, "nginx: ", 7);
	//此时p指向可以写入的头部

    va_start(args, fmt);//内存分配即把fmt中的参数分配到args中
    p = ngx_vslprintf(p, last, fmt, args);
    va_end(args);//释放内存

    if (err) {//定义了错误信息
        p = ngx_log_errno(p, last, err);
    }
   // #define NGX_LINEFEED_SIZE       1   last-NGX_LINEFEED_SIZE即最后一个可以使用的位置
    if (p > last - NGX_LINEFEED_SIZE) {
        p = last - NGX_LINEFEED_SIZE;//超过了使用空间,调整
    }
	//#define ngx_linefeed(p)          *p++ = LF;
    ngx_linefeed(p);
// 	#define LF     (u_char) '\n'//unix/linux下
// #define CR     (u_char) '\r'//mac下
// #define CRLF   "\r\n"  //windows下
//都代表换行  此处代表linux下的回车符

    (void) ngx_write_console(ngx_stderr, errstr, p - errstr);
//#define ngx_write_console        ngx_write_fd
//static ngx_inline ssize_t
// ngx_write_fd(ngx_fd_t fd, void *buf, size_t n)
// {
//     return write(fd, buf, n);
// }
//#define ngx_stderr        STDERR_FILENO
//#define ngx_inline      inline
//ngx_inline代表inile是一个宏   
	
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值