⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000020.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 3 页
字号:
{&nbsp;&nbsp;<BR>&nbsp;va_list&nbsp;&nbsp;ap;&nbsp;&nbsp;<BR>&nbsp;va_start(ap,&nbsp;fmt);&nbsp;&nbsp;<BR>&nbsp;err_doit(1,&nbsp;fmt,&nbsp;ap);&nbsp;&nbsp;<BR>&nbsp;va_end(ap);&nbsp;&nbsp;<BR>&nbsp;abort();&nbsp;&nbsp;/*&nbsp;dump&nbsp;core&nbsp;and&nbsp;terminate&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;exit(1);&nbsp;&nbsp;/*&nbsp;shouldn't&nbsp;get&nbsp;here&nbsp;*/&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>/*&nbsp;Nonfatal&nbsp;error&nbsp;unrelated&nbsp;to&nbsp;a&nbsp;system&nbsp;call.&nbsp;&nbsp;<BR>&nbsp;*&nbsp;Caller&nbsp;specifies&nbsp;&quot;errnoflag&quot;.&nbsp;*/&nbsp;&nbsp;<BR>static&nbsp;void&nbsp;&nbsp;<BR>err_doit(int&nbsp;errnoflag,&nbsp;const&nbsp;char&nbsp;*fmt,&nbsp;va_list&nbsp;ap)&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;int&nbsp;&nbsp;errno_save;&nbsp;&nbsp;<BR>&nbsp;char&nbsp;buf[MAXLINE];&nbsp;&nbsp;<BR>&nbsp;errno_save&nbsp;=&nbsp;errno;&nbsp;&nbsp;/*&nbsp;value&nbsp;caller&nbsp;might&nbsp;want&nbsp;printed&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;vsprintf(buf,&nbsp;fmt,&nbsp;ap);&nbsp;&nbsp;<BR>&nbsp;if&nbsp;(errnoflag)&nbsp;&nbsp;<BR>&nbsp;&nbsp;sprintf(buf+strlen(buf),&nbsp;&quot;:&nbsp;%s&quot;,&nbsp;strerror(errno_save));&nbsp;&nbsp;<BR>&nbsp;strcat(buf,&nbsp;&quot;\n&quot;);&nbsp;&nbsp;<BR>&nbsp;fflush(stdout);&nbsp;&nbsp;/*&nbsp;in&nbsp;case&nbsp;stdout&nbsp;and&nbsp;stderr&nbsp;are&nbsp;the&nbsp;same&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;fputs(buf,&nbsp;stderr);&nbsp;&nbsp;<BR>&nbsp;fflush(stderr);&nbsp;&nbsp;/*&nbsp;SunOS&nbsp;4.1.*&nbsp;doesn't&nbsp;grok&nbsp;NULL&nbsp;argument&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;return;&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>程序B.2&nbsp;&nbsp;输出至标准出错文件的出错处理函数&nbsp;&nbsp;<BR>&nbsp;程序B.3包括了各log_xxx出错处理函数。若进程不以精灵进程方式进行,那么调&nbsp;&nbsp;<BR>用者应当定义变量debug,并将其设置为非0值。在这种情况下,出错消息被送至标&nbsp;&nbsp;<BR>准出错文件。若debug标志为0,则使用syslog功能(见13.4.2节)。&nbsp;&nbsp;<BR>/*&nbsp;Error&nbsp;routines&nbsp;for&nbsp;programs&nbsp;that&nbsp;can&nbsp;run&nbsp;as&nbsp;a&nbsp;daemon.&nbsp;*/&nbsp;&nbsp;<BR>#include&nbsp;&lt;errno.h&gt;&nbsp;&nbsp;/*&nbsp;for&nbsp;definition&nbsp;of&nbsp;errno&nbsp;*/&nbsp;&nbsp;<BR>#include&nbsp;&lt;stdarg.h&gt;&nbsp;&nbsp;/*&nbsp;ANSI&nbsp;C&nbsp;header&nbsp;file&nbsp;*/&nbsp;&nbsp;<BR>#include&nbsp;&lt;syslog.h&gt;&nbsp;&nbsp;<BR>#include&nbsp;&quot;ourhdr.h&quot;&nbsp;&nbsp;<BR>static&nbsp;void&nbsp;log_doit(int,&nbsp;int,&nbsp;const&nbsp;char&nbsp;*,&nbsp;va_list&nbsp;ap);&nbsp;&nbsp;<BR>extern&nbsp;int&nbsp;debug;&nbsp;&nbsp;/*&nbsp;caller&nbsp;must&nbsp;define&nbsp;and&nbsp;set&nbsp;this:&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nonzero&nbsp;if&nbsp;interactive,&nbsp;zero&nbsp;if&nbsp;daemon&nbsp;*/&nbsp;&nbsp;<BR>/*&nbsp;Initialize&nbsp;syslog(),&nbsp;if&nbsp;running&nbsp;as&nbsp;daemon.&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;<BR>log_open(const&nbsp;char&nbsp;*ident,&nbsp;int&nbsp;option,&nbsp;int&nbsp;facility)&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;if&nbsp;(debug&nbsp;==&nbsp;0)&nbsp;&nbsp;<BR>&nbsp;&nbsp;openlog(ident,&nbsp;option,&nbsp;facility);&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>/*&nbsp;Nonfatal&nbsp;error&nbsp;related&nbsp;to&nbsp;a&nbsp;system&nbsp;call.&nbsp;&nbsp;<BR>&nbsp;*&nbsp;Print&nbsp;a&nbsp;message&nbsp;with&nbsp;the&nbsp;system's&nbsp;errno&nbsp;value&nbsp;and&nbsp;return.&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;<BR>log_ret(const&nbsp;char&nbsp;*fmt,&nbsp;...)&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;va_list&nbsp;&nbsp;ap;&nbsp;&nbsp;<BR>&nbsp;va_start(ap,&nbsp;fmt);&nbsp;&nbsp;<BR>&nbsp;log_doit(1,&nbsp;LOG_ERR,&nbsp;fmt,&nbsp;ap);&nbsp;&nbsp;<BR>&nbsp;va_end(ap);&nbsp;&nbsp;<BR>&nbsp;return;&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>/*&nbsp;Fatal&nbsp;error&nbsp;related&nbsp;to&nbsp;a&nbsp;system&nbsp;call.&nbsp;&nbsp;<BR>&nbsp;*&nbsp;Print&nbsp;a&nbsp;message&nbsp;and&nbsp;terminate.&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;<BR>log_sys(const&nbsp;char&nbsp;*fmt,&nbsp;...)&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;va_list&nbsp;&nbsp;ap;&nbsp;&nbsp;<BR>&nbsp;va_start(ap,&nbsp;fmt);&nbsp;&nbsp;<BR>&nbsp;log_doit(1,&nbsp;LOG_ERR,&nbsp;fmt,&nbsp;ap);&nbsp;&nbsp;<BR>&nbsp;va_end(ap);&nbsp;&nbsp;<BR>&nbsp;exit(2);&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>/*&nbsp;Nonfatal&nbsp;error&nbsp;unrelated&nbsp;to&nbsp;a&nbsp;system&nbsp;call.&nbsp;&nbsp;<BR>&nbsp;*&nbsp;Print&nbsp;a&nbsp;message&nbsp;and&nbsp;return.&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;<BR>log_msg(const&nbsp;char&nbsp;*fmt,&nbsp;...)&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;va_list&nbsp;&nbsp;ap;&nbsp;&nbsp;<BR>&nbsp;va_start(ap,&nbsp;fmt);&nbsp;&nbsp;<BR>&nbsp;log_doit(0,&nbsp;LOG_ERR,&nbsp;fmt,&nbsp;ap);&nbsp;&nbsp;<BR>&nbsp;va_end(ap);&nbsp;&nbsp;<BR>&nbsp;return;&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>/*&nbsp;Fatal&nbsp;error&nbsp;unrelated&nbsp;to&nbsp;a&nbsp;system&nbsp;call.&nbsp;&nbsp;<BR>&nbsp;*&nbsp;Print&nbsp;a&nbsp;message&nbsp;and&nbsp;terminate.&nbsp;*/&nbsp;&nbsp;<BR>void&nbsp;&nbsp;<BR>log_quit(const&nbsp;char&nbsp;*fmt,&nbsp;...)&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;va_list&nbsp;&nbsp;ap;&nbsp;&nbsp;<BR>&nbsp;va_start(ap,&nbsp;fmt);&nbsp;&nbsp;<BR>&nbsp;log_doit(0,&nbsp;LOG_ERR,&nbsp;fmt,&nbsp;ap);&nbsp;&nbsp;<BR>&nbsp;va_end(ap);&nbsp;&nbsp;<BR>&nbsp;exit(2);&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>/*&nbsp;Print&nbsp;a&nbsp;message&nbsp;and&nbsp;return&nbsp;to&nbsp;caller.&nbsp;&nbsp;<BR>&nbsp;*&nbsp;Caller&nbsp;specifies&nbsp;&quot;errnoflag&quot;&nbsp;and&nbsp;&quot;priority&quot;.&nbsp;*/&nbsp;&nbsp;<BR>static&nbsp;void&nbsp;&nbsp;<BR>log_doit(int&nbsp;errnoflag,&nbsp;int&nbsp;priority,&nbsp;const&nbsp;char&nbsp;*fmt,&nbsp;va_list&nbsp;ap)&nbsp;&nbsp;<BR>{&nbsp;&nbsp;<BR>&nbsp;int&nbsp;&nbsp;errno_save;&nbsp;&nbsp;<BR>&nbsp;char&nbsp;buf[MAXLINE];&nbsp;&nbsp;<BR>&nbsp;errno_save&nbsp;=&nbsp;errno;&nbsp;&nbsp;/*&nbsp;value&nbsp;caller&nbsp;might&nbsp;want&nbsp;printed&nbsp;*/&nbsp;&nbsp;<BR>&nbsp;vsprintf(buf,&nbsp;fmt,&nbsp;ap);&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;if&nbsp;(errnoflag)&nbsp;&nbsp;<BR>&nbsp;&nbsp;sprintf(buf+strlen(buf),&nbsp;&quot;:&nbsp;%s&quot;,&nbsp;strerror(errno_save));&nbsp;&nbsp;<BR>&nbsp;strcat(buf,&nbsp;&quot;\n&quot;);&nbsp;&nbsp;<BR>&nbsp;if&nbsp;(debug)&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;fflush(stdout);&nbsp;&nbsp;<BR>&nbsp;&nbsp;fputs(buf,&nbsp;stderr);&nbsp;&nbsp;<BR>&nbsp;&nbsp;fflush(stderr);&nbsp;&nbsp;<BR>&nbsp;}&nbsp;else&nbsp;&nbsp;<BR>&nbsp;&nbsp;syslog(priority,&nbsp;buf);&nbsp;&nbsp;<BR>&nbsp;return;&nbsp;&nbsp;<BR>}&nbsp;&nbsp;<BR>程序B.3&nbsp;&nbsp;用于精灵进程的处理函数&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -