通过grep源码,分析grep返回值
2010-05-31 19:47
316 查看
问题:
在群里跟朋友讨论grep的出错,提到grep返回码与返回的错误信息问题
想要确认grep的返回值是多少,如何区分各种错误,反回特意去gnu网站下载的grep源码进行分析
grep源码分析结果:
1:grep返回值有三个,0匹配,1:不匹配,2:出错
2:错误信息(包括解析后的错误代码)输出到标准错误中
3:通过设置-s,可以屏蔽错误显示
ps:二个发现
1:源码里有个dfa.c和dfa.h, 应该是grep里有到的正则引擎,正则引擎分DFA和NFA二种,DFA快,但没NFA的d环视,回朔等功能
2:源码里,解析"-"为标准输入。之前讨论过关于"-"参数为标准输入的问题,现在可以确认grep对-参数,是程序解析,而非shell解析
具体源码分析如下:
main函数退出语句
exit (errseen ? 2 : status);
errseen说明:
其中errseen在函数里设置,并通过error输出到标准输出
suppressible_error (char const *mesg, int errnum)
{
if (! suppress_errors)
error (0, errnum, "%s", mesg);
errseen = 1;
}
suppressible_error 被调了四次,
包括buf,file,dir等几种错误,
在没有suppress,即屏蔽错误信息前提下,通过error函数,将错误输出到标准错误
error函数在第二个参数不为0的时候,调用perror解析错误代码,比如(这里用的是系统命令)
[root@localhost sc]# perror 5
+ perror 5
OS error code 5: Input/output error
status说明:
默认为1,即不匹配:
status = 1;
通过与grepfile返回值做逻辑与,若有匹配,置成0,
if (optind < argc){
status &= grepfile (strcmp (file, "-") == 0 ? (char *) NULL : file,
}
else
{status = grepfile ((char *) NULL, &stats_base);}
grepfile函数分析:
匹配(count>1)返回0,没匹配(count=0)返回1
status = !count;
return status;
在群里跟朋友讨论grep的出错,提到grep返回码与返回的错误信息问题
想要确认grep的返回值是多少,如何区分各种错误,反回特意去gnu网站下载的grep源码进行分析
grep源码分析结果:
1:grep返回值有三个,0匹配,1:不匹配,2:出错
2:错误信息(包括解析后的错误代码)输出到标准错误中
3:通过设置-s,可以屏蔽错误显示
ps:二个发现
1:源码里有个dfa.c和dfa.h, 应该是grep里有到的正则引擎,正则引擎分DFA和NFA二种,DFA快,但没NFA的d环视,回朔等功能
2:源码里,解析"-"为标准输入。之前讨论过关于"-"参数为标准输入的问题,现在可以确认grep对-参数,是程序解析,而非shell解析
具体源码分析如下:
main函数退出语句
exit (errseen ? 2 : status);
errseen说明:
其中errseen在函数里设置,并通过error输出到标准输出
suppressible_error (char const *mesg, int errnum)
{
if (! suppress_errors)
error (0, errnum, "%s", mesg);
errseen = 1;
}
suppressible_error 被调了四次,
包括buf,file,dir等几种错误,
在没有suppress,即屏蔽错误信息前提下,通过error函数,将错误输出到标准错误
error函数在第二个参数不为0的时候,调用perror解析错误代码,比如(这里用的是系统命令)
[root@localhost sc]# perror 5
+ perror 5
OS error code 5: Input/output error
status说明:
默认为1,即不匹配:
status = 1;
通过与grepfile返回值做逻辑与,若有匹配,置成0,
if (optind < argc){
status &= grepfile (strcmp (file, "-") == 0 ? (char *) NULL : file,
}
else
{status = grepfile ((char *) NULL, &stats_base);}
grepfile函数分析:
匹配(count>1)返回0,没匹配(count=0)返回1
status = !count;
return status;
相关文章推荐
- 通过grep源码,分析grep返回值
- 通过分析系统日志,统计你的电脑开机时间的小程序PC PowerOn Time,附源码
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 【转】Android系统原理与源码分析:利用Java反射技术阻止通过按钮关闭对话框
- Android中通过NTP服务器获取时间功能源码分析
- Mybatis源码分析--返回值ResultType和ResultMap
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 通过阅读源码分析elasticsearch中分片如何分配到集群中节点
- 详细解读Volley(五)—— 通过源码来分析业务流程
- Android初级教程通过简要分析“土司”源码,来自实现定义土司理论探讨
- android开发步步为营之79:通过源码分析Looper,Handler,MessageQueue之间的关系
- springMVC源码分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)
- Dubbo介绍2- 源码分析,通过schema启动服务
- 通过JDK源码分析关闭钩子详解
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- <util:properties/>加载的配置文件中有中文导致乱码,如何通过分析源码解决问题?
- 通过Intent传输图片导致广播消息异常的问题根因分析(通过分析Android源码反向推理)