博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx之ngx_errno.c文件阅读
阅读量:6241 次
发布时间:2019-06-22

本文共 1312 字,大约阅读时间需要 4 分钟。

hot3.png

file:ngx_errno.c

1.作者为什么写这个模块?
2.这个模块要完成什么功能?
3.NGX_SYS_NERR这玩意在哪定义的,这么写有什么好处?
4.为什么ngx_strerror_init 里面使用了goto语句?
5.如果这个模块有本人写,会写成啥样?
6.作者设计函数非常棒的地方?
7.不明白的地方有?
a1.因为strerror strerror_r 都不是信号安全的
    a1.1有没有小例子说明不是信号安全的函数有什么问题?
a2.这个函数要完成的功能是:根据errno返回描述字符串
    如果由本人设计strerror信号安全版本 参数ho_strerror(int errnum, char *buf, size_t n);
a3.unknown
a4.ngx_strerror_init 函数出现两句goto语句,如果不使用goto的话
   第一次出现goto的地方替换为  

err = errno   ngx_log_stderr();   return NGX_ERROR

   第二次出现goto的地方替换为 

err = errno   ngx_log_stderr();   return NGX_ERROR

   两种方式完成功能都使用6行代码,从代码行数goto版的写法没啥优势, 有优势的地方ngx_log_stderr只出现一次,

   如果修改了ngx_log_stderr, goto版的写法只要改一个ngx_log_stderr,这样就不会像return 版有时发生,改了第一个忘了改第二个的情况。
本人写法如下:

#define HO_NERR 256 static char **ho_errlist;static char *ho_unknown_error = "Unknown error";int ho_strerror_init(void) {    size_t len;    int    err;    ho_errlist = malloc(HO_NERR * sizeof(char *));    if (ho_errlist == NULL)        goto failed;    for (err = 0; err < HO_NERR; err++) {        ho_errlist[err] = strdup(strerror(err));        if (ho_errlist[err] == NULL)            goto failed;    }    return 0;failed:    fprintf(stderr, "alloc memory failed (%d: %s)", err, strerror(err));    return -1;}char *ho_strerror(int err, char *buf, size_t n) {    char *msg;    msg = err

a6.
a7.

转载于:https://my.oschina.net/guonaihong/blog/283732

你可能感兴趣的文章
【转载】常用统计软件下载地址大全
查看>>
新的思想来源
查看>>
对于超大型SQL SERVER数据库执行DBCC操作
查看>>
Binary Tree Level Order Traversal II
查看>>
Python 点滴 I
查看>>
Java泛型详解
查看>>
分治算法思想介绍
查看>>
1 张图秒懂 Nova 16 种操作 - 每天5分钟玩转 OpenStack(44)
查看>>
MVP模式在Android项目中的使用
查看>>
一起同过窗
查看>>
XMLHttpRequest详解
查看>>
9 数字载波传输1
查看>>
iOS开发之功能模块--高仿Boss直聘的IM界面交互功能
查看>>
Flume Source 实例
查看>>
MySQL 缓存表建触发器
查看>>
.NetCore~C#6的一些新特性
查看>>
Recurrent Neural Networks(RNN) 循环神经网络初探
查看>>
多线程中数的原子性加减
查看>>
客户被绑,蒙眼,惊问:“想干什么?” 对方不语,鞭笞之,客户求饶:“别打,要钱?” 又一鞭,“十万够不?” 又一鞭,“一百万?” 又一鞭。客户崩溃:“你们TMD到底要啥?” “要什么?......
查看>>
jQuery.fly插件实现添加购物车抛物线效果
查看>>