• 输出至标准出错文件的出错处理函数


    [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);
    }
  • 相关阅读:
    什么是web框架
    编写CGI程序步骤
    web开发 c/s结构 和 b/s结构
    python自带的web服务器
    自制计算器
    条件判断
    模版继承
    参数传递
    异常处理
    【uoj#244】[UER #7]短路 CDQ分治+斜率优化dp
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3495026.html
Copyright © 2020-2023  润新知