出错处理
2011-04-10 10:15
162 查看
1.assert宏
#include<assert.h>
void assert(int expressio);
禁用assert宏
#define NDEBUG
2.预编译
_LINE_,_FILE_宏
_LINE_,为int型行号。
_FILE_,为char*型文件名。
_FUNCTION_,为当前函数的名字,属于GNU C扩展。
3.标准库函数
stdlib.h void abort(void);
stdlib.h void exit(int status);
stdlib.h int atexit(void (*fcn)(void));
stdio.h void perror(const char *s);
string.h char *strerror(int errnum);
errno.h int errno;
stdio.h void clearerr(FILE *stream); //清除EOF(end-of-file)条件以及任何为stream设置的出错标志。
stdio.h int feof(FILE * stream); //如果设置了stream的EOF标志则返回真(非0)。
stdio.h int ferror(FILE* stream); //如果设置了stream的出错标志则返回真(非0);
linux系统调用和许多但不是所有的库函数在出错时都要把全局变量errno设置为一个非0值。但是没有库函数能把errno清零,而有时-1是一个合法的返回值。最好在在调用一个设置errno的函数前清零。
errno=0;
<errno.h>中定义了多种错误代码。
abort函数会导致程序异常终止,程序在被终止前不能进行一些常规的清除工作。不处理atexit
abort会向os返回一个预先定义的值以便告诉操作系统这是一个不成功的终止。
如果没有ulinit的限制,abort还会卸下一个core文件。
exit在完成清理工作后才终止程序。处理atexit。
status是exit函数返回给操作系统的退出值。
atexit登记在程序正常终止时要调用的函数,不是由exit调用就是通过程序的main函数返回来调用。
如果fcn登记成功,atexit返回0
strerror返回errno的可读提示信息。
perror(const char* s);
首先打印s,之后打印可读信息和错误号。
4 系统日志
klogd内核和运行在内核空间的程序。
syslogd用户空间程序的消息。
系统日志位于/var/log,版本不同,这些日志文件包括message,debug,mail,news,可能还有secure。取决于/etc/syslog.conf中定义的日志功能配置。标准的控制台日志守护进程是syslog,由它来维护这些日志文件。写入系统日志的消息由它的级别level和功能facility来控制,级别指出了消息的严重性或重要性,功能告诉维护系统日志的syslogd守护进程是哪个程序发送的这条消息。级别和功能合起来被称为优先级。
level:
LOG_EMERG
LOG_ALERT
LOG_CRIT
LOG_ERR
LOG_WARNING
LOG_NOTICE
LOG_INFO
LOG_DEBUG
facility:
LOG_AUTHPRIV
LOG_CRON
LOG_DAEMON
LOG_KERN
LOG_LOCAL[0-7]
LOG_LPR
LOG_MAIL
LOG_NEWS
LOG_SYSLOG
LOG_USER
LOG_UUCP
#include <syslog.h>
void syslog(int priority, char *format, ...)
priority是级别和功能的位逻辑“或”值。特殊的格式说明字符%m由strerror为errno分配的错误信息进行替换。
#include<syslog.h>
void openlog(const char* ident, int option, int facility);
定制日志操作。
facility是功能值,ident指定了加到日志消息前的字符串。option是表中零个或者多个选项的位逻辑“或”值。
option:
LOG_PID
LOG_CONS
LOG_NDELAY
LOG_PERROR
#include<syslog.h>
int setlogmask(int priority);
为所有的日志消息设置了默认的级别。设置了优先级默认的掩码。syslog拒绝任何没有在掩码只设置的优先级消息。返回值是原先优先级的掩码。
LOG_MASK(int priority)创建一个仅由一个优先级组成的掩码。
LOG_UPTO(int priority)创建一个由一系列降序优先级组成的掩码,这里的priority是允许的最低优先级。
#include<assert.h>
void assert(int expressio);
禁用assert宏
#define NDEBUG
2.预编译
_LINE_,_FILE_宏
_LINE_,为int型行号。
_FILE_,为char*型文件名。
_FUNCTION_,为当前函数的名字,属于GNU C扩展。
3.标准库函数
stdlib.h void abort(void);
stdlib.h void exit(int status);
stdlib.h int atexit(void (*fcn)(void));
stdio.h void perror(const char *s);
string.h char *strerror(int errnum);
errno.h int errno;
stdio.h void clearerr(FILE *stream); //清除EOF(end-of-file)条件以及任何为stream设置的出错标志。
stdio.h int feof(FILE * stream); //如果设置了stream的EOF标志则返回真(非0)。
stdio.h int ferror(FILE* stream); //如果设置了stream的出错标志则返回真(非0);
linux系统调用和许多但不是所有的库函数在出错时都要把全局变量errno设置为一个非0值。但是没有库函数能把errno清零,而有时-1是一个合法的返回值。最好在在调用一个设置errno的函数前清零。
errno=0;
<errno.h>中定义了多种错误代码。
abort函数会导致程序异常终止,程序在被终止前不能进行一些常规的清除工作。不处理atexit
abort会向os返回一个预先定义的值以便告诉操作系统这是一个不成功的终止。
如果没有ulinit的限制,abort还会卸下一个core文件。
exit在完成清理工作后才终止程序。处理atexit。
status是exit函数返回给操作系统的退出值。
atexit登记在程序正常终止时要调用的函数,不是由exit调用就是通过程序的main函数返回来调用。
如果fcn登记成功,atexit返回0
strerror返回errno的可读提示信息。
perror(const char* s);
首先打印s,之后打印可读信息和错误号。
4 系统日志
klogd内核和运行在内核空间的程序。
syslogd用户空间程序的消息。
系统日志位于/var/log,版本不同,这些日志文件包括message,debug,mail,news,可能还有secure。取决于/etc/syslog.conf中定义的日志功能配置。标准的控制台日志守护进程是syslog,由它来维护这些日志文件。写入系统日志的消息由它的级别level和功能facility来控制,级别指出了消息的严重性或重要性,功能告诉维护系统日志的syslogd守护进程是哪个程序发送的这条消息。级别和功能合起来被称为优先级。
level:
LOG_EMERG
LOG_ALERT
LOG_CRIT
LOG_ERR
LOG_WARNING
LOG_NOTICE
LOG_INFO
LOG_DEBUG
facility:
LOG_AUTHPRIV
LOG_CRON
LOG_DAEMON
LOG_KERN
LOG_LOCAL[0-7]
LOG_LPR
LOG_MAIL
LOG_NEWS
LOG_SYSLOG
LOG_USER
LOG_UUCP
#include <syslog.h>
void syslog(int priority, char *format, ...)
priority是级别和功能的位逻辑“或”值。特殊的格式说明字符%m由strerror为errno分配的错误信息进行替换。
#include<syslog.h>
void openlog(const char* ident, int option, int facility);
定制日志操作。
facility是功能值,ident指定了加到日志消息前的字符串。option是表中零个或者多个选项的位逻辑“或”值。
option:
LOG_PID
LOG_CONS
LOG_NDELAY
LOG_PERROR
#include<syslog.h>
int setlogmask(int priority);
为所有的日志消息设置了默认的级别。设置了优先级默认的掩码。syslog拒绝任何没有在掩码只设置的优先级消息。返回值是原先优先级的掩码。
LOG_MASK(int priority)创建一个仅由一个优先级组成的掩码。
LOG_UPTO(int priority)创建一个由一系列降序优先级组成的掩码,这里的priority是允许的最低优先级。
相关文章推荐
- UNIX基础知识之出错处理
- Unix环境编程----出错处理(errno)
- 关于dpkg:处理 xxx (--configure)时出错(ubuntu12.04)
- SqlBulkCopy批量插入DB,异常处理,某行出错,保证正确行可插入DB
- java命令出错处理
- UNIX基础知识之出错处理
- dpkg: 处理归档 /var/cache/apt/archives/软件名 (--unpack)时出错
- android 内部sdcard出错处理errors=remount-ro改为errors=continue
- AMD 三核处理器安装SQL Server2005出错处理解决方案。
- Rhel: pygame安装与范例运行,以及中间出错问题的处理(redhat)
- asp.net页面出错时的处理方法
- RewriterConfig 的配置节处理程序时出错: 无法生成临时类
- 编译源文件的时候出错处理
- 出错处理函数abort、exit、atexit、strerror
- Ubuntu:dpkg: 处理软件包 runit (--configure)时出错
- IIS6.0出错脚本引擎异常处理方法
- opencv中图像处理出错情况总结
- dpkg:处理 xxx (--configure)时出错解决办法
- 程序设计中的三种不同出错的处理方式及其优缺点
- 使用AndroidAnnotations 的AS配置和出错处理