《unix高级编程21.pdf》由会员分享,可在线阅读,更多相关《unix高级编程21.pdf(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、下载下载附录B 其他源代码B.1 头文件正文中的大多数程序都包含头文件 o u r h d r.h,这示于程序B-1中。其中定义了常数(例如M A X L I N E)和我们自编函数的原型。因为大多数程序序包含下列头文件:、(其中有e x i t函数原型),以及(其中包含所有标准U N I X函数的原型),所以o u r h d r.h包含了这些系统头文件,同时还包含了。这样就减少了本书正文中所有程序的长度。程序B-1 头文件o u r h d r.h附录B 其他源代码5 1 3下载程序中先包括一般系统头文件,然后再包括o u r h d r.h,这样就能解决某些系统之间的差别(例如4.3BS
2、D Reno中没有定义S I G _ E R R),并且也可定义一些我们的函数原型,而这些仅当包括一般系统头文件之后才是需要的。当在原型中引用未定义的结构时,某些 ANSI C编译程序会认为不正常。B.2 标准出错处理例程我们提供了两个出错处理例程,它们可用于本书中大多数实例以处理各种出错情况。一个例程以e r r _开头,并向标准出错文件输出一条出错消息。另一个例程以 l o g _开头,用于精灵进程(见第1 3章),它们多半没有控制终端。提供了这些出错处理函数后,只要在程序中写一行代码就可以进行出错处理,例如:if(出错条件)e r r _ d u m p(带任意参数的p r i n t
3、f格式);这样也就不再需要使用下列代码:if(出错条件)c h a rb u f f 2 0 0 ;sprintf(buff,带任意参数的p r i n t f格式);p e r r o r(b u f f);abort();我们的出错处理函数使用了ANSI C的变长参数表功能。其详细说明见 K e r n i g h a n和R i t c h i e1 9 9 8的7.3节。应当注意的是这一 ANSI C功能与早期系统(例如 S V R 3和4.3 B S D)提供的v a r a rg s功能不同。宏的名字相同,但更改了某些宏的参数。表B-1列出了各个出错处理函数之间的区别。表B-1 标
4、准出错处理函数程序B-2包括了输出至标准出错文件的各个出错处理函数。程序B-2 输出至标准出错文件的出错处理函数5 1 4U N I X环境高级编程下载函数s t r e r r o r(e r r n o)?终止?E r r _ r e t是r e t u r n;E r r _ s y s是e x i t(1);E r r _ d u m p是abort();E r r _ m s g否r e t u r n;E r r _ q u i t否exit(1);L o g _ r e t是r e t u r n;L o g _ s y s是e x i t(2);L o g _ m s g否r e t u r n;L o g _ q u i t否e x i t(2);附录B 其他源代码5 1 5下载程序B-3包括了各l o g _X X X出错处理函数。若进程不以精灵进程方式进行,那么调用者应当定义变量d e b u g,并将其设置为非 0值。在这种情况下,出错消息被送至标准出错文件。若d e b u g标志为0,则使用s y s l o g设施(见1 3.4.2节)。程序B-3 用于精灵进程的处理函数5 1 6U N I X环境高级编程下载附录B 其他源代码5 1 7下载