快速业务通道

linux C出错处理

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-09

1,assert宠
包含文件:<assert.h>
原型:void assert(int expression) ;
如果expression为假(0),向stderr打印一条出错信息,然后调用函数abort
来终止程序.
在开发阶段通过在<assert.h>的包含语句前插入#define NDEBUG来禁用asset.
#include <stdio.h>
#define NDEBUG
#include <assert.h>
如果定义了NDEBUG,就不会调用assert宏.
2,标准库函数
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设置的出错标志.

int feof(FILE *stream);
如果设置了stream的EOF标志则返回真(非0).

int ferror(FILE *stream);
如果设置了stream的出错标志则返回真(非0).
3,errno 有很多常用值,在使用前最好先清零.
具体值查看资料.
4,abort函数 比较严厉的函数,会导致程序异常终止,无法进行常规清除工作.
5,exit函数
完成清理工作,并执行atexit注册的函数,但以与注册相反的顺序执行.
6,atexit函数
7,strerror函数
原型: #include <string.h>
char *strerror(int errnum);
返回一个描述和errnum相关的字符串的指针.
8,perror函数
原型: #include <stdio.h>
#include <errno.h>
void perror(const char *s);
perror打印字符串s,之后一个冒号和一个空格,然后是对应errno的错误信
息的换行符.
它们等价: perror("Oops");
printf("Oops: %sn",strerror(errno));
9,系统日志选项
系统日志位于/var/log目录下.
标准控制台日志守护进程是syslogd
级别(消息的重要性)和功能(哪个进程发送的)合起来是它的优先级(priority).
具体的日志级别和功能LOG_XXX,参看其它资料([GUN/Linux编程指南(第二版)
134页).

10,系统日志函数
#include <syslog.h>
void syslog(int priority, char *format,...);
priority由功能和级别相或得到.
定制日志操作函数
#include <syslog.h>
void openlog(const char *ident, int option, int facility);
ident是指定加到消息前的字符串,option是一些选项的“或”值.
为所有的日志消息设置默认级别:
#include <syslog.h>
int setlogmask(int priority);
priority是值或范围值.有两个辅助宏:
LOG_MASK(int priority) //单个优先级组成的掩码
LOG_UPTO(int priority) //priority是允许的最低优先级.创建的是一个范
围的掩码.

11,在Shell中有logger命令,系统日志的shell接口.
logger [-s] [-f file] [-p pri] [-t tag] [-u socket ] [message...]
-i 向日志消息中加入PID
-s 同时向stderr和日志写入日志消息
-f file 向文件写入日志消息.
-p pri 使用pri指定的优先级
-t tag 向日志消息加入字符串tag
-u socket 向socket指定的套接口而不是系统日志写入日志消息.
message 写入日志的消息.

本文出自 “WIK” 博客,请务必保留此出处http://noyear.blog.51cto.com/819034/398665

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号