• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            分享知識

            與大家一起分享知識

            C++博客 首頁 新隨筆 聯系 聚合 管理
              19 Posts :: 3 Stories :: 45 Comments :: 0 Trackbacks

            D.3 Standard Error Functions

            We define our own set of error functions that are used throughout the text to
            ?handle error conditions. The reason for using our own error functions is to
            let us write our error handling with a single line of C code, as in

            										
            if (error condition)
                err_sys (printf format with any number of arguments);
            
            										

            instead of

            										
            if (error condition) {
                char buff [2002];
                snprintf(buff, sizeof (buff), printf format 
            ??? with any number of arguments)
            ; perror(buff); exit (1); }
            										

            Our error functions use the variable-length argument list facility from ANSI C.
            See Section 7.3 of [Kernighan and Ritchie 1988] for additional details.

            Figure D.3 lists the differences between the various error functions.
            If the global integer daemon_proc is nonzero, the message is passed to
            syslog with the indicated level; otherwise, the error is output to standard error.
            Figure D.3. Summary of our standard error functions.
            graphics/xdfig03.gif

            Figure D.4 shows the first five functions from Figure D.3.

            Figure D.4 Our standard error functions.

            lib/error.c

             1 #include    "unp.h"
             2 #include    <stdarg.h>          /* ANSI C header file */
             3 #include    <syslog.h>          /* for syslog() */
            
             4 int     daemon_proc;            /* set nonzero by daemon_init() */
            
             5 static void err_doit(int, int, const char *, va_list);
            
             6 /* Nonfatal error related to system call
             7  * Print message and return */
            
             8 void
             9 err_ret(const char *fmt, ...)
            10 {
            11     va_list ap;
            
            12     va_start(ap, fmt);
            13     err_doit(1, LOG_INFO, fmt, ap);
            14     va_end(ap);
            15     return;
            16 }
            
            17 /* Fatal error related to system call
            18  * Print message and terminate */
            
            19 void
            20 err_sys(const char *fmt, ...)
            21 {
            22     va_list ap;
            
            23     va_start(ap, fmt);
            24     err_doit(1, LOG_ERR, fmt, ap);
            25     va_end(ap);
            26     exit(1);
            27 }
            
            28 /* Fatal error related to system call
            29  * Print message, dump core, and terminate */
            
            30 void
            31 err_dump(const char *fmt, ...)
            32 {
            33     va_list ap;
            
            34     va_start(ap, fmt);
            35     err_doit(1, LOG_ERR, fmt, ap);
            36     va_end(ap);
            37     abort();                    /* dump core and terminate */
            38     exit(1);                    /* shouldn't get here */
            39 }
            
            40 /* Nonfatal error unrelated to system call
            41  * Print message and return */
            
            42 void
            43 err_msg(const char *fmt, ...)
            44 {
            45     va_list ap;
            
            46     va_start(ap, fmt);
            47     err_doit(0, LOG_INFO, fmt, ap);
            48     va_end(ap);
            49     return;
            50 }
            
            51 /* Fatal error unrelated to system call
            52  * Print message and terminate */
            
            53 void
            54 err_quit(const char *fmt, ...)
            55 {
            56     va_list ap;
            
            57     va_start(ap, fmt);
            58     err_doit(0, LOG_ERR, fmt, ap);
            
            59     va_end(ap);
            60     exit(1);
            61 }
            
            62 /* Print message and return to caller
            63  * Caller specifies "errnoflag" and "level" */
            
            64 static void
            65 err_doit(int errnoflag, int level, const char *fmt, va_list ap)
            66 {
            67     int     errno_save, n;
            68     char    buf[MAXLINE + 1];
            
            69     errno_save = errno;         /* value caller might want printed */
            70 #ifdef HAVE_VSNPRINTF
            71     vsnprintf(buf, MAXLINE, fmt, ap);   * safe */
            72 #else
            73     vsprintf(buf, fmt, ap);     /* not safe */
            74 #endif
            75     n = strlen(buf);
            76     if (errnoflag)
            77         snprintf(buf + n, MAXLINE - n, ": %s", strerror(errno_save));
            78     strcat(buf, "\n");
            
            79     if (daemon_proc) {
            80         syslog(level, buf);
            81     } else {
            82         fflush(stdout);         /* in case stdout and stderr are the same */
            83         fputs(buf, stderr);
            84         fflush(stderr);
            85     }
            86     return;
            87 }
            
            posted on 2006-05-09 21:39 史傳紅 閱讀(1009) 評論(0)  編輯 收藏 引用 所屬分類: 鏈接目錄
            色诱久久久久综合网ywww | 久久久精品久久久久久 | 久久精品国产只有精品66| 国产女人aaa级久久久级| 久久国产欧美日韩精品免费| 亚洲午夜久久久久妓女影院| 97久久久久人妻精品专区| 久久精品国产亚洲精品| 久久精品亚洲中文字幕无码麻豆| 成人午夜精品久久久久久久小说| 一级a性色生活片久久无| 久久线看观看精品香蕉国产| 模特私拍国产精品久久| 九九久久99综合一区二区| 国产成人久久精品一区二区三区| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 日本欧美国产精品第一页久久| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 亚洲第一极品精品无码久久| 久久国产一片免费观看| 久久99精品久久久久久| 99久久国产亚洲综合精品| 国产精品熟女福利久久AV| 国产精品久久久久天天影视| 精品无码久久久久国产动漫3d| 久久国产成人| 久久精品夜色噜噜亚洲A∨| 青青热久久综合网伊人| 久久综合九色综合欧美狠狠| 丰满少妇人妻久久久久久| 少妇久久久久久久久久| 97精品伊人久久大香线蕉| 久久只有这精品99| 色妞色综合久久夜夜| 久久毛片一区二区| 欧美黑人激情性久久| 久久99精品久久只有精品| 99久久成人国产精品免费| 久久91亚洲人成电影网站| 青青青国产成人久久111网站| 国产AⅤ精品一区二区三区久久|