#include "myerr.h"

本文介绍了一组用于C语言中处理不同类型的错误情况的函数。这些函数包括非致命和致命错误处理,可以应用于与系统调用相关的错误或者与之无关的情况。通过使用这些函数,开发者能够更加灵活地管理和响应程序运行过程中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "apue.h"  
#include <errno.h> /* for definition of errno */  
#include <stdarg.h> /* ISO C variable aruments */ 
static void err_doit(int, int, const char *, va_list); 
/*  
* Nonfatal error related to a system call. 
* Print a message and return. 
*/ 
void  err_ret(const char *fmt, ...) 
{     
va_list ap;     
va_start(ap, fmt);     
err_doit(1, errno, fmt, ap);     
va_end(ap); 

/*  
* Fatal error related to a system call. 
* Print a message and terminate.
 */ 
void  err_sys(const char *fmt, ...) 
{      
va_list ap;      
va_start(ap, fmt);     
err_doit(1, errno, fmt, ap);     
va_end(ap);     
exit(1); 

/*  
* Fatal error unrelated to a system call. 
* Error code passed as explict parameter. 
* Print a message and terminate. 
*/ 
void  err_exit(int error, const char *fmt, ...) 
{      
va_list ap;      
va_start(ap, fmt);      
err_doit(1, error, fmt, ap);     
va_end(ap);     
exit(1); 
}
 /*  
* Fatal error related to a system call.  
* Print a message, dump core, and terminate. 
*/
void  err_dump(const char *fmt, ...) 
{      
va_list ap;      
va_start(ap, fmt);      
err_doit(1, errno, fmt, ap);     
va_end(ap);      
abort(); /* dump core and terminate */     
exit(1); /* shouldn't get here */ 

/* 
 * Nonfatal error unrelated to a system call. 
* Print a message and return. 
*/ 
void  err_msg(const char *fmt, ...) 
{      
va_list ap;      
va_start(ap, fmt);      
err_doit(0, 0, fmt, ap);    
va_end(ap); 

/* 
 * Fatal error unrelated to a system call. 
* Print a message and terminate. 
*/ 
void  err_quit(const char *fmt, ...) 
{      
va_list ap;      
va_start(ap, fmt);      
err_doit(0, 0, fmt, ap);     
va_end(ap);     
exit(1); 

/*  
* Print a message and return to caller. 
* Caller specifies "errnoflag".
 */  
static void  err_doit(int errnoflag, int error, const char *fmt, va_list ap) {      
char buf[MAXLINE];     
vsnprintf(buf, MAXLINE, fmt, ap); 
if (errnoflag)        
snprintf(buf+strlen(buf), 
MAXLINE-strlen(buf), ": %s",          
strerror(error));    
strcat(buf, " ");     
fflush(stdout); /* in case stdout and stderr are the same */   
fputs(buf, stderr);    
fflush(NULL); /* flushes all stdio output streams */ 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值