linux C出错处理

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: %s\n",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 写入日志的消息。

你可能感兴趣的:(linux,职场,休闲,出错处理)