zoukankan      html  css  js  c++  java
  • 《Unix网络编程》中的错误处理函数

    #include "net.h"
    
    #include <syslog.h>   // syslog()   
    
    int daemon_proc;
    
    static void err_doit(int errnoflag, int level, const char *fmt, va_list ap)
    {
        int errno_save, n;
        char buf[MAXLINE + 1];
        errno_save = errno;
    
    #ifdef HAVE_VSNPRINTF
        vsnprintf(nuf, MAXLINE, fmt, ap);
    #else
        vsprintf(buf, fmt, ap);
    #endif
    
        n = strlen(buf);
    
        if (errnoflag)
            snprintf(buf + n, MAXLINE - n, ": %s", strerror(errno_save));
        
        strcat(buf, "
    ");
    
        if (daemon_proc)
        {
            syslog(level, buf);
        }
        else
        {
            fflush(stdout);
              fputs(buf, stderr);
              fflush(stderr);
        }
    
        return;
    }
    
    void err_ret(const char *fmt, ...)
    {
        va_list ap;
        va_start(ap, fmt);
        err_doit(1, LOG_INFO, fmt, ap);
        va_end(ap);
        return;
    }
    
    void err_sys(const char *fmt, ...)
    {
        va_list ap;
        va_start(ap, fmt);
        err_doit(1, LOG_INFO, fmt, ap);
        va_end(ap);
        exit(1);
    }
    
    void err_dump(const char *fmt, ...)
    {
        va_list ap;
        va_start(ap, fmt);
        err_doit(1, LOG_ERR, fmt, ap);
        va_end(ap);
        abort();
        exit(1);
    }
    
    void err_msg(const char *fmt, ...)
    {
        va_list ap;
        va_start(ap, fmt);
        err_doit(1, LOG_INFO, fmt, ap);
        va_end(ap);
        return;
    }
    
    void err_quit(const char *fmt, ...)
    {
        va_list ap;
        va_start(ap, fmt);
        err_doit(1, LOG_INFO, fmt, ap);
        va_end(ap);
        exit(1);
    }
  • 相关阅读:
    SQL优化大全
    程序的装入和链接
    Linux系统管理常用命令
    作业、进程、线程
    MySQL优化大全
    Linux系统结构 详解
    NoSQL数据库探讨
    操作系统内存管理——分区、页式、段式管理
    进程调度算法
    操作系统文件管理
  • 原文地址:https://www.cnblogs.com/lnlin/p/9367147.html
Copyright © 2011-2022 走看看