"UNIX环境高级编程(第2版)/图灵计算机科学丛书"的书摘……
252本版前言1a1c1ac111c111a1a1
253引言2a2c2ac222c222a2a2
254我与RichcStevens最早是通过电子邮件开始交往的,3当时我发邮件报告他的第一本书《UNIX网络编程》的一个排版错误.a他回信开玩笑说我是第一个给他发这本书勘误的人.a到他1999年故去之前,3我们时不时地会通些邮件,3一般都是在有了问题认为对方能解答的时候.a我们在USENIX会议期间多次相见,3并共进晚餐,cRich在会议中给大家做技术培训.aRichcStevens真是个益友,3行为举止很有绅士风度.a我在1993年写《UNIX系统V网络编程》时,3试图把书写成他的《UNIX网络编程》的系统V版.aRich发自内心地高兴地为我审阅了好几章,3并不把我当成竞争对手,3而是当作一起写书的同事.a我们曾多次谈到要合作给他的《TCP/IP详解》写个STREAMS版.a天若有情,3我们或许已经完成了这个心愿.a然而,3Rich已经驾鹤西去,3修订《UNIX环境高级编程》就成为我跟他一起写书的最易实现的方式.a当Addison-Wesley公司的编辑找到我说想修订Rich的这本书时,3我第一反应是这本书没有多少要改的.a尽管13年过去了,3Rich的书还是巍然屹立.a但是,3与当初本书出版的时候相比,3今日的UNIX行业已经有了巨大的变化.a3a3c3ac333c333a3a3
255?c系统V的各个变种渐渐被Linux所取代.a原来生产硬件配以各自的UNIX版本的几个主要厂商,4要么提供了Linux的移植版本,4要么宣布支持Linux.aSolaris可能算是硕果仅存的占有一定市场份额的UNIX系统V版本4的后裔了.a4a4c4ac444c444a4a4
256?c加州大学伯克利分校的CSRG(计算机科学研究组)在发布了4.4BSD之后,5已经决定不再开发UNIX操作系统,5只有几个志愿者小组还维护着一些可公开获得的版本.a5a5c5ac555c555a5a5
257?cLinux受到数以千计的志愿者的支持,6它的引入使任何一个拥有计算机的人都能运行类似于UNIX系统的操作系统,6并且可以免费获得源代码支持哪怕最新的硬件设备.a在已经存在几种免费BSD版本的情况下,6Linux的成功确实是个奇迹.a6a6c6ac666c666a6a6
258?c苹果公司作为一个富有创新精神的公司,7已经放弃了老的Mac操作系统,7换之以一个在Mach和FreeBSD基础上开发的新系统.a7a7c7ac777c777a7a7
259因此,8我已经努力更新本书中的内容,8以反映这四种平台.a8a8c8ac888c888a8a8
2510在Richc1992年出版《UNIX环境高级编程》之后,9我扔掉了手头几乎所有的UNIX程序员手册.a这些年来,9我桌上最常摆放的就是两本书,9一本是字典,9另一本就是《UNIX环境高级编程》.a我希望读者也能认为本修订版一样有用.a9a9c9ac999c999a9a9
2511对第1版的改动10a10c10ac101010c101010a10a10
2512Rich的书依然屹立,11我试图不去改动他这本书原来的风格.a但是13年间世事兴衰,11尤其是影响UNIX编程接口的有关标准变化很大.a11a11c11ac111111c111111a11a11
2513我依据标准化组织的标准,12更新了全书相关的接口方面的内容.a第2章改动较大,12因为它主要是讨论标准的.a本书第1版是根据POSIX.1标准的1990年版写的,12本修订版依据2001年版的新标准,12内容要丰富很多.a1990年ISO的C标准在1999年也更新了,12有些改动影响到POSIX.1标准中的接口.a12a12c12ac121212c121212a12a12
2514目前的POSIX.1规范涵盖了更多的接口.aThecOpencGroup(原称X/Open)发布的“SingleUNIXcSpecification”的基本规范现在已经并入POSIX.1,13后者包含了几个1003.1标准和另外几个标准草案,13原来这些标准是分开出版的.a13a13c13ac131313c131313a13a13
2515我也相应地增加了些章节讨论新主题.a线程和多线程编程是相当重要的概念,14因为它们为程序员处理并发和异步提供了更清晰的方式.a14a14c14ac141414c141414a14a14
2516套接字接口现在也是POSIX.1的一部分了.a它为进程间通信(IPC)提供了单一的接口,15而不考虑进程的位置.a它成为IPC章节的自然扩展.a15a15c15ac151515c151515a15a15
2517我省略了POSIX.1中的大部分实时接口.a这些内容最好是在一本专门讲述实时编程的书中介绍.a参考文献里有一本这方面的书.a16a16c16ac161616c161616a16a16
2518我把最后面几章的案例研究也更新了,17用了更接近现实的例子.a例如,17现在很少有系统通过串口或并口连接PostScript打印机了,17多数PostScript打印机是通过网络连接的,17所以我对PostScript打印机通信的例子做了修改.a17a17c17ac171717c171717a17a17
2519有关调制解调器通信的那一章如今已经不太适用了.a原始材料我们保留在本书网站上,18有两种格式:PostScript(http://www.apuebook.com/lostchapter/modem.ps)和PDF(http://www.apuebook.com/lostchapter/modem.pdf).a18a18c18ac181818c181818a18a18
2520书中实例的源代码也可以从www.apuebook.com上获得.a多数实例已经在下述四种平台上运行过:19a19c19ac191919c191919a19a19
2521(1)cFreeBSDc5.2.1,20这是加州大学伯克利分校CSRG的4.4BSD的一个变种,20在英特尔奔腾处理器上运行.a20a20c20ac202020c202020a20a20
2522(2)cLinuxc2.4.22(Mandrakec9.2发布),21是一个免费的类UNIX操作系统,21运行于英特尔奔腾处理器上.a21a21c21ac212121c212121a21a21
2523(3)cSolarisc9,22是Sun公司系统V版本4的变种,22运行于64位的UltraSPARCcIIi处理器上.a22a22c22ac222222c222222a22a22
2524(4)cDarwinc7.4.0,23是基于FreeBSD和Mach的操作系统环境,23也是ApplecMaccOScXc10.3版本的核心,23运行于PowerPC处理器上.a23a23c23ac232323c232323a23a23
2525致谢24a24c24ac242424c242424a24a24
2526(首先要感谢)RichcStevens独立创作了本书第1版,25它立即成为一本经典著作.a没有家人的支持,25我不可能修订此书.a他们容忍我满屋子散落稿纸(比平常还甚),25霸占了家里的好几台机器,25成天埋头于电脑屏幕前.a我的妻子Jeanne甚至亲自动手帮我在一台测试的机器上安装了Linux.a多名技术审校者提出了很多改进意见,25确保内容准确.a我非常感谢DavidcBausum.cDavidBoreham.cKeithcBostic.cMarkcEllis.cPhilcHoward.cAndrewcJosey.cMukeshcKacker.cBrianKernighan.cBengtcKleberg.cBencKuperman.cEriccRaymond和AndycRudoff.a我还要谢谢AndycRudoff给我解答有关Solaris的问题,25谢谢DenniscRitchie不惜花时间从故纸堆中为我寻找有关历史方面问题的答案.a再次谢谢Addison-Wesley公司的员工,25与他们合2c前言25a25c25ac252525c252525a25a25
2527作令人愉快,26谢谢TyrrellcAlbaugh.cMarycFranz.cJohncFuller.cKarencGettman.cJessicaGoldstein.cNoreencRegina和JohncWait.a特别感谢EvelyncPyle细致地编辑了本书.a就像Rich曾经做到的那样,26我非常欢迎读者发来邮件,26发表评论,26提出建议,26订正错误.a26a26c26ac262626c262626a26a26
2528StephencA.Rago27a27c27ac272727c272727a27a27
2529sar@apuebook.com28a28c28ac282828c282828a28a28
25302005年4月于新泽西州Warren市29a29c29ac292929c292929a29a29
253130a30c30ac303030c303030a30a30
2532第1版前言31a31c31ac313131c313131a31a31
2533引言32a32c32ac323232c323232a32a32
2534本书描述了UNIX系统的程序设计接口—系统调用接口和标准C库提供的很多函数.a本书针对的是所有的程序员.a33a33c33ac333333c333333a33a33
2535与大多数操作系统一样,34UNIX为程序运行提供了大量的服务—打开文件,34读文件,34启动一个新程序,34分配存储区以及获得当前时间等.a这些服务被称为系统调用接口(systemccallinterface).a另外,34标准C库提供了大量广泛用于C程序中的函数(格式化输出变量的值,34比较两个字符串等).a34a34c34ac343434c343434a34a34
2536系统调用接口和库函数可参见《UNIX程序员手册》第2.c3部分.a本书不是这些内容的重复.a手册中没有给出实例及基本原理,35而这些则正是本书所要讲述的内容.a35a35c35ac353535c353535a35a35
2537UNIX标准36a36c36ac363636c363636a36a36
253820世纪80年代出现了各种版本的UNIX,3720世纪80年代后期在此基础上制定了数个国际标准,37包括C程序设计语言的ANSI标准.cIEEEcPOSIX标准系列(还在制定中).cX/Open可移植性指南.a37a37c37ac373737c373737a37a37
2539本书也介绍了这些标准,38但是并不只是说明标准本身,38而是着重说明它们与应用广泛的一些实现(主要指SVR4以及即将发布的4.4BSD)之间的关系.a这是一种贴近现实世界的描述,38而这正是标准本身以及仅描述标准的文献所缺少的.a38a38c38ac383838c383838a38a38
2540本书的组织39a39c39ac393939c393939a39a39
2541本书分为6个部分:40a40c40ac404040c404040a40a40
2542(1)c对UNIX程序设计基本概念和术语的简要描述(第1章),41以及对各种UNIX标准化工作和不同UNIX实现的讨论(第2章).a41a41c41ac414141c414141a41a41
2543(2)cI/O—不带缓冲的I/O(第3章).c文件和目录(第4章).c标准I/O库(第5章)和标准系统数据文件(第6章).a42a42c42ac424242c424242a42a42
2544(3)c进程—UNIX进程的环境(第7章).c进程控制(第8章).c进程之间的关系(第9章)和信号(第10章).a43a43c43ac434343c434343a43a43
2545(4)c更多的I/O—终端I/O(第11章).c高级I/O(第12章)和守护进程(第13章).a44a44c44ac444444c444444a44a44
2546(5)cIPC—进程间通信(第14和15章).a45a45c45ac454545c454545a45a45
2547(6)c实例—一个数据库的函数库(第16章).c与PostScriptc打印机的通信(第17章).c调制解调器拨号程序(第18章)和使用伪终端(第19章).a46a46c46ac464646c464646a46a46
2548如果对C语言较熟悉并具有某些应用UNIX的经验,47对学习本书将非常有益,47但是并不要求读者必须具有UNIX编程经验.a本书面向的读者主要是:熟悉UNIX的程序员和熟悉其他某47a47c47ac474747c474747a47a47
25492c第1版前言48a48c48ac484848c484848a48a48
2550个操作系统且希望了解大多数UNIX系统提供的各种服务细节的程序员.a49a49c49ac494949c494949a49a49
2551本书中的实例50a50c50ac505050c505050a50a50
2552本书包含了大量实例—大约10c000行源代码.a所有实例都用ANSIcC语言编写.a在阅读本书时,51建议准备一本你所使用的UNIX系统的《UNIX程序员手册》,51在细节方面有时需要参考该手册.a51a51c51ac515151c515151a51a51
2553几乎对于每一个函数和系统调用,52本书都用一个小的完整的程序进行了演示.a这可以让读者清楚地了解它们的用法,52包括参数和返回值等.a有些小程序还不足以说明库函数和系统调用的复杂功能和应用技巧,52所以书中还包含了一些较大的实例(见第16~19章).a所有实例的源代码文件都可在因特网上用匿名fctcp从因特网主机ftp.uu.net的published/books/stevens.advprog.tar.Z文件下载.a读者可以在自己的机器上修改52a52c52ac525252c525252a52a52
2554并运行这些源代码.a53a53c53ac535353c535353a53a53
2555用于测试实例的系统54a54c54ac545454c545454a54a54
2556不幸的是,55所有的操作系统都在不断变更,55UNIX也不例外.a下图给出了系统V和4.xBSD最近的进展情况.a55a55c55ac555555c555555a55a55
25574.xBSD是由加州大学伯克利分校CSRG开发的.a该小组还发布了BSDcNet1和BSDcNet2版,56其公开的源代码源自4.xBSD系统.aSVRxc表示AT&T的系统V第x版.aXPG3指X/Open可移植性指南的第3个发行版.aANSIcC是C语言的ANSI标准.aPOSIX.1是IEEE和ISO的类UNIX系统接口标准.a2.2节和2.3节将对这些标准和不同版本之间的差别做更多的说明.a本书中用4.3 BSD表示源自伯克利的介于BSDcNet2和4.4BSD之间的UNIX系统.a56a56c56ac565656c565656a56a56
2558在本书写作时,574.4BSD尚未发布,57所以不能称一个系统是4.4BSD的.a为了用一个简单的名字来引用该系统,57故使用4.3 BSD.a57a57c57ac575757c575757a57a57
2559本书中的大多数实例曾在下面4种UNIX系统上运行过:58a58c58ac585858c585858a58a58
2560(1)cU.H公司(UHC)的UNIX系统V/386cR4.0.2(vanillacSVR4),59运行于Intelc80386处理器上.a59a59c59ac595959c595959a59a59
2561(2)c加州大学伯克利分校CSRG的4.3 BSD,60运行于惠普工作站上.a60a60c60ac606060c606060a60a60
2562(3)c伯克利软件设计公司的BSD/386(是BSDcNet2的变种),61运行于Intelc80386处理器上.a该系统与4.3 BSD几乎相同.a61a61c61ac616161c616161a61a61
2563(4)cSun公司的SunOSc4.1.1和4.1.2(该系统与伯克利系统有很深的渊源,62但也包含了许多系统V的特性),62运行于SPARCstationcSLC上.a62a62c62ac626262c626262a62a62
2564本书还提供了许多时间测试及用于测试的实际系统.a63a63c63ac636363c636363a63a63
2565致谢64a64c64ac646464c646464a64a64
2566在过去的一年半中,65家人给予了我大力支持和爱,65因为写书我们失去了很多快乐的周末,65我深感歉疚.a写书从许多方面影响了整个家庭.a谢谢Sally.cBill.cEllen和David.a我要特别感谢BriancKernighan对我写作此书的帮助.a他审阅了全部书稿,65不但提出了大量有洞察力的技术意见,65还委婉地指出了多处修辞问题,65但愿我能够在最终成稿中已经加以体现.aStevecRago也成为了我的创作源泉,65不但审阅了全部书稿,65还为我解答了有关系统V的许多技术细节和历史问题.a还要感谢Addison-Wesley公司邀请的其他技术审校者,65他们对书稿的各个部分提出了很有价值的意见,65他们是MaurycBach.cMarkcEllis.cJeffcGitlin.cPeterHoneyman.cJohncLinderman.cDougcMcIlroy.cEvicNemeth.cCraigcPartridge.cDavecPresotto.cGarycWilson.cGarycWright.a65a65c65ac656565c656565a65a65
2567(感谢)加州大学伯克利分校CSRG的KeithcBostic和KirkcMcKusick给了我一个账号,66可在最新的BSD系统上测试书中实例.a(也要感谢PetercSalus)UHC的SamcNataros和JoachimcSacksen给我提供了一份SVR4,66用来测试书中例子.aTrentcHein则帮助我获得BSD/386的alpha和beta版.a66a66c66ac666666c666666a66a66
2568其他朋友在过去这些年以各种方式提供了帮助,67看似不大,67却非常重要.a他们是PaulLucchina.cJoecGodsil.cJimcHogue.cEdcTankus和GarycWright.a本书的编辑是Addison-Wesley公司的JohncWait,67他自始至终是我的忠实朋友.a我不断地延期交稿,67写作篇幅也一再超过计划,67他从不抱怨.a特别还要感谢美国国家光学天文台(NOAO),67尤其是SidneycWolff.cRichardcWolff和StevecGrandi,67为我提供准确的计算机时间.a67a67c67ac676767c676767a67a67
2569真正的UNIX书应该用troff写成,68本书也遵循了这一优秀传统.a最终清样是作者用JamesClark写的groff软件包做出的.a非常感谢JamescClark提供了这个优异的写作软件,68并迅速地修正其中所发现的bug.a也许有一天我会最终弄清楚troff软件做页脚的技巧.a我十分欢迎读者发来电子邮件,68发表评论,68提出建议,68订正错误.a68a68c68ac686868c686868a68a68
2570W.RichardcStevens69a69c69ac696969c696969a69a69
2571rstevens@kohala.com70a70c70ac707070c707070a70a70
2572http://www.kohala.com/~rstevens71a71c71ac717171c717171a71a71
25731992年4月于亚利桑那州塔克森市72a72c72ac727272c727272a72a72