zoukankan      html  css  js  c++  java
  • 输出至标准出错文件的出错处理函数

    [root@localhost unix_env_advance_prog]# cat error.c 
    #include "apue.h"
    #include <errno.h>
    #include <stdarg.h>
    
    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 dand terminate.
    */
    void 
    err_dump(const char *fmt, ...)
    {
            va_list ap;
    
            va_start(ap, fmt);
            err_doit(1, errno, fmt, ap);
            va_end(ap);
            abort();
            exit(1);
    }
    
    /*
    * 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 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);
            fputs(buf, stderr);
            fflush(NULL);
    }
  • 相关阅读:
    ORACLE的自定义排序
    PDA上一个UDP通讯客户端
    构造
    sort()的使用
    VC2012链接mySql
    宏的一些代码
    试卷
    疑问
    代码1
    vector学习
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3495026.html
Copyright © 2011-2022 走看看