新书上架--UNIX环境高级编程中文版

来源:互联网 发布:淘宝茶叶怎么添加属性 编辑:程序博客网 时间:2024/04/30 05:58

我差不多每次在接受专访当中,或是做技术讲座后的提问时间里,总会被问及这样一个问题:“你想到过UNIX会生存这么长时间吗?”自然,每次的回答都是:没有,我们没想到会是这样。从某种角度说,UNIX系统已经伴随了商用计算行业历史的大半,而这也早就不是什么新闻了。

发展的历程错综复杂,充满变数。自20世纪70年代初以来,计算机技术经历了沧海桑田般的变化,尤其体现在网络技术的普遍应用、图形化的无所不在、个人计算的触手可及,然而UNIX系统却奇迹般地容纳和适应了所有这些变化。虽然商业应用环境在桌面领域目前仍然为微软和英特尔所统治,但是在某些方面已经从单一供应商向多种来源转变,近年来对公共标准和免费开放资源的信赖已经与日俱增。

UNIX作为一种现象而不单是商标品牌,有幸能与时俱进,乃至领导潮流。在上个世纪70~80年代,AT&T虽对UNIX的实际源代码进行了版权保护,但却鼓励在系统的接口和语言基础上进行标准化的工作。例如,AT&T发布了SVIDSystem V Interface Definition,系统V接口定义),这成为POSIX及其后续工作的基础。后来,UNIX可以说相当优雅地适应了网络环境,虽不那么轻巧却也充分地适应了图形环境。再往后,开源运动的技术基础中集成了UNIX的基本内核接口和许多它独特的用户级工具。

即使在UNIX软件系统本身还是专有的时候,鼓励出版UNIX系统方面的论文和书籍也是至关重要的,著名的例子就是Maurice Bach的《UNIX操作系统设计》一书。其实我要说明的是,UNIX长寿的主要原因是,它吸引了极具天分的技术作者,为大众解读它的优美和神秘所在。Brian Kernighan是其中之一,Rich Stevens自然也是。本书第1版连同Stevens所著的系列网络技术书籍,被公认为优秀的、匠心独具的名著,成为极其畅销的作品。

然而,本书第1版毕竟出版时间太早了,那时还没有出现Linux,源自伯克利 CSRGUNIX接口的开源版本还没有广为流行,很多人的网络还在用串行调制解调器。Steve Rago认真仔细地更新了本书,以反映所有这些技术进展,同时还考虑到各种ISO标准和IEEE标准这些年来的变化。因此,他的例子是最新的,也是最新测试过的。

总之,这是一本弥足珍贵的经典著作的更新版。

 

Dennis Ritchie

20053月于新泽西州Murray Hill

    

引言

我与Rich Stevens最早是通过电子邮件开始交往的,当时我发邮件报告他的第一本书《UNIX网络编程》的一个排版错误。他回信开玩笑说我是第一个给他发这本书勘误的人。到他1999年故去之前,我们时不时地会通些邮件,一般都是在有了问题认为对方能解答的时候。我们在USENIX会议期间多次相见,并共进晚餐,Rich在会议中给大家做技术培训。

Rich Stevens真是个益友,行为举止很有绅士风度。我在1993年写《UNIX系统V网络编程》时,试图把书写成他的《UNIX网络编程》的系统V版。Rich发自内心地高兴地为我审阅了好几章,并不把我当成竞争对手,而是当作一起写书的同事。我们曾多次谈到要合作给他的《TCP/IP详解》写个STREAMS版。天若有情,我们或许已经完成了这个心愿。然而,Rich已经驾鹤西去,修订《UNIX环境高级编程》就成为我跟他一起写书的最易实现的方式。

Addison-Wesley公司的编辑找到我说想修订Rich的这本书时,我第一反应是这本书没有多少要改的。尽管13年过去了,Rich的书还是巍然屹立。但是,与当初本书出版的时候相比,今日的UNIX行业已经有了巨大的变化。

* 系统V的各个变种渐渐被Linux所取代。原来生产硬件配以各自的UNIX版本的几个主要厂商,要么提供了Linux的移植版本,要么宣布支持LinuxSolaris可能算是硕果仅存的占有一定市场份额的UNIX系统V版本4的后裔了。

* 加州大学伯克利分校的CSRG(计算机科学研究组)在发布了4.4BSD之后,已经决定不再开发UNIX操作系统,只有几个志愿者小组还维护着一些可公开获得的版本。

* Linux受到数以千计的志愿者的支持,它的引入使任何一个拥有计算机的人都能运行类似于UNIX系统的操作系统,并且可以免费获得源代码支持哪怕最新的硬件设备。在已经存在几种免费BSD版本的情况下,Linux的成功确实是个奇迹。

* 苹果公司作为一个富有创新精神的公司,已经放弃了老的Mac操作系统,换之以一个在MachFreeBSD基础上开发的新系统。

因此,我已经努力更新本书中的内容,以反映这4个平台。

Rich1992年出版《UNIX环境高级编程》之后,我扔掉了手头几乎所有的UNIX程序员手册。这些年来,我桌上最常摆放的就是两本书,一本是字典,另一本就是《UNIX环境高级编程》。我希望读者也能认为本修订版一样有用。

对第1版的改动

Rich的书依然屹立,我试图不去改动他这本书原来的风格。但是13年间世事兴衰,尤其是影响UNIX编程接口的有关标准变化很大。

我依据标准化组织的标准,更新了全书相关的接口方面的内容。第2章改动较大,因为它主要是讨论标准的。本书第1版是根据POSIX.1标准的1990年版写的,本修订版依据2001年版的新标准,内容要丰富很多。1990ISOC标准在1999年也更新了,有些改动影响到POSIX.1标准中的接口。

目前的POSIX.1规范涵盖了更多的接口。The Open Group(原称X/Open)发布的“Single UNIX Specification”的基本规范现在已经并入POSIX.1,后者包含了几个1003.1标准和另外几个标准草案,原来这些标准是分开出版的。

我也相应地增加了些章节,讨论新主题。线程和多线程编程是相当重要的概念,因为它们为程序员处理并发和异步提供了更清楚的方式。

套接字接口现在也是POSIX.1的一部分了。它为进程间通信(IPC)提供了单一的接口,而不考虑进程的位置。它成为IPC章节的自然扩展。

我省略了POSIX.1中的大部分实时接口。这些内容最好是在一本专门讲述实时编程的书中介绍。参考文献里有一本这方面的书。

我把最后面几章的案例研究也更新了,用了更接近现实的例子。例如,现在很少有系统通过串口或并口连接PostScript打印机了,多数PostScript打印机是通过网络连接的,所以我对PostScript打印机通信的例子做了修改。

有关调制解调器通信的那一章如今已经不太适用了。原始材料我们保留在本书网站上,有两种格式:PostScripthttp://www.apuebook.com/lostchapter/modem.ps)和PDFhttp://www. apuebook.com/lostchapter/modem.pdf)。

书中示例的源代码也可以从www.apuebook.com上获得。多数示例已经在下述4种平台上运行过了:

(1) FreeBSD 5.2.1,这是加州大学伯克利分校CSRG4.4BSD的一个变种,在英特尔奔腾处理器上运行。

(2) Linux 2.4.22Mandrake 9.2发布),是一个免费的类UNIX操作系统,运行于英特尔奔腾处理器上。

(3) Solaris 9,是Sun公司系统V版本4的变种,运行于64位的UltraSPARC IIi处理器上。

(4) Darwin 7.4.0,是基于FreeBSDMach的操作系统环境,也是Apple Mac OS X 10.3版本的核心,运行于PowerPC处理器上。

致谢

(首先要感谢)Rich Stevens独立创作了本书第1版,它立即成为一本经典著作。

没有家人的支持,我不可能修订此书。他们容忍我满屋子散落稿纸(比平常还甚),霸占了家里的好几台机器,成天埋头于电脑屏幕前。我的妻子Jeanne甚至亲自动手帮我在一台测试的机器上安装了Linux

多名技术审校者提出了很多改进意见,确保内容准确。我非常感谢David BausumDavid BorehamKeith BosticMark EllisPhil HowardAndrew JoseyMukesh KackerBrian KernighanBengt KlebergBen KupermanEric RaymondAndy Rudoff

我还要谢谢Andy Rudoff给我解答有关Solaris的问题,谢谢Dennis Ritchie不惜花时间从故纸堆中为我寻找有关历史方面问题的答案。再次谢谢Addison-Wesley公司的员工,与他们合作令人愉快,谢谢Tyrrell AlbaughMary FranzJohn FullerKaren GettmanJessica GoldsteinNoreen ReginaJohn Wait。特别感谢Evelyn Pyle细致地编辑了本书。

就像Rich曾经做到的那样,我非常欢迎读者发来邮件,发表评论,提出建议,订正错误。

 

 

Stephen A.Rago

sar@apuebook.com

20054月于新泽西州Warren