"高级unix编程(原书第2版)"的书摘……
482本书是对1985年版《AdvancedcUNIXcProgramming》的更新,1覆盖了过去18年来UNIX所发生的一些变化.a也许“一些”并不确切!“更新”同样不太确切.a的确,1除了散落各处的个别句子,1本书基本是全新的.a第1版大约包含了70个系统调用,c本版大约包含了300个.a本版所讨论的UNIX标准和实现[POSIX.cSolaris.cLinux.cFreeBSD以及Darwin(MaccOSX)]在1985年左右还未出现.a但是我仍然可以在1985年版的前言中找到一些无需修改便可用在这里的句子:.1a1c1ac111c111a1a1
483本书的主题是UNIX系统调用——即UNIX内核与在其上层运行的用户程序之间的接口.a对于那些仅使用命令与系统交互(比如shell.c文本编辑器以及其他应用程序)的人来讲,2或许不必对系统调用有太多了解,2但对于UNIX程序员来说,2对系统调用的彻底了解是至关重要的.acc系统调用是访问诸如文件系统.c多任务机制以及进程间通信原语等内核功能的唯一途径.a2a2c2ac222c222a2a2
484系统调用定义了UNIX系统到底是什么.a所有的一切(除了子程序和命令行)都是建立在这个基础之上的.a尽管这些高层程序的许多新颖之处为UNIX赢得了不少名声,3但它们也同样可以在任何现代操作系统上实现.a当人们说UNIX系统是个雅致的.c简单的.c高效的.c可靠的和可移植的操作系统时,3指的不是其命令(其中一些并不怎么样),3而是其内核.a3a3c3ac333c333a3a3
485以上所说仍然正确,4只是有一点令人遗憾:现在内核的编程接口不再那么雅致.c简单了.a尊实上,4由于在过去几十年中UNIX的发展分裂为几个分支,4同时因为最初的标准化组织(ThecOpencGroup)将几乎所有已有的函数都集合了起来(一共1108个函数),4所以导致接口变得笨拙.c矛盾.c冗余,4容易出错和混淆.a但它依然高效.c可靠并可移植,4这就是为什么UNIX和类UNIX系统如此成功的原因.a的确,4UNIX系统调用接口是迄今我们所拥有的唯一一个具有广泛可移植性的接口,4而且这种状况可能在我们有生之年不会改变.a.4a4c4ac444c444a4a4
486为了理清问题,5拥有全部的文档是不够的,5就像仅仅拥有黄页并不能找到好的饭店或宾馆一样.a我们需要一位向导,5能够告诉我们什么是好的.c什么是坏的,5而不仅仅是告诉我们有哪些东西.a这就是本书的目的所在,5也是本书与其他UNIX编程书的不同之处.a本书不仅要指导读者如何使用系统调用,5还要告诉他们不要使用哪些系统调用,5因为那些系统调用都不是必需的,5它们有的过时了,5有的未被正确地实现,5有的设计得很糟糕.a5a5c5ac555c555a5a5
487下面简单介绍一下本书的大致内容:开篇将介绍单一UNIX规范第3版中定义的1108个函数,6但其中去掉了大约590个标准C函数和其他不属于内核接口层的库函数.c大约90个POSIX线程函数(保留了其中十多个最为重要的).c大约25个审计登录函数.c大约50个跟踪函数.c大约15个晦涩废旧的函数以及大约40个用于调度和其他不大有用的函数.a本书真正要介绍的只有307个.a(见附录D的列表.a)不是说这307个全是好的函数——有的也没什么用处,6有的甚至还是危险的.a但这307个函数都是读者需要了解的.a..6a6c6ac666c666a6a6
488本书没有包括以下内容:内核实现(除了一些基本的).c设备驱动程序.cc程序设计(有些间接的除外).cUNIX命令(shell.cvi.cemacs等)和系统管理.a7a7c7ac777c777a7a7
489全书共有9章:基本概念.c基本文件I/O.c高级文件I/O.c终端I/0.c进程和线程.c基本的进程间通信.c高级进程间通信.c网络和套接字以及信号和定时器.a先通读第1章,8而后就可以自由跳跃浏览了.a其中有许多交叉参考,8能避免在阅读中迷失.a8a8c8ac888c888a8a8
4810同第1版一样,9这本新书包括了几千行示例代码,9其中大多数来源于实际程序(比如shell.c全屏菜单系统.cWeb服务器和实时输出记录器),9并进行了简化.a这些例子都是用C语言编写的,9但在本书的附录B和附录C中给出了其他语言的接口,9所以如果你喜欢,9就可以采用C++.cJava或Jython(Python的变体)来编程.a9a9c9ac999c999a9a9
4811文字和示例代码仅仅是种资源,c实际上还要通过练习来学习UNIX编程.a为了提供练习,10在每章的末尾都有练习题.a这些练习难度不一,10有的只需要简单地编写几行代码,10有的则是一学期的课程设计.a10a10c10ac101010c101010a10a10
4812我选了4种UNIX系统作为详细研究之用,11并用来测试例子:Solarisc8.cSuSEcLinuxc8(2.104内核).cFreeBSDc4.106和Darwin(MaccOScX内核)6.108.a我将源码保存在FreeBSD系统上,11然后用NFS或Samba把代码安装到其他系统上.a11a11c11ac111111c111111a11a11
4813我在Windows系统上用TextPad编辑代码,12使用Telnet.cSSH(PuTTY)或者XWindow系统(XFree86和Cygwin)访问4个测试系统.a在同一显示屏上打开文本编辑器和4个Telnet/SSH/Xterm窗口十分方便,12因为从写代码到在4个系统上测试只需要几分钟时间.a另外,12我常常使用一个浏览器窗口打开单一UNIX规范,12一个浏览器窗口打开Google,12一个浏览器窗口运行MicrosoftWord写书.a除了Word对于像书之类的大型文档(破折号,12混合样式,12弱交叉引用,12古怪的文档组合)有些糟糕之外,12所有的工具都很好用.a我使用Peri和Python做了不同的事情,12比如抽取代码样本和维护系统调用的数据库.a12a12c12ac121212c121212a12a12
4814所有的示例代码(免费公开代码).c勘误表和更多的内容都在本书的Web站点www.12basepath.12com/aup上.ac13a13c13ac131313c131313a13a13
4815我要感谢那些审阅了草稿或者以其他方式提供了技术支持的人:TomcCargill.cGeoffcClare.cAndrewcGierth.cAndrewcJosey.cBriancKernighan.cBarrycMargolin.cCraigcPatridge和DavidcSchwartz.a另外还要特别感谢那些专心细致地审阅了草稿但要求匿名的人.a当然,14这些人不需要为您在本书中找到的错误受到谴责——我信任他们.a14a14c14ac141414c141414a14a14
4816我还要感谢我的编辑——MarycFranz,15是她在一年前提议编写该书的.a幸运的是,15她正好是在我深入浏览了Linux并再一次为UNIX而兴高采烈的时候找到了我.a这使我回想起1972年的时候……15a15c15ac151515c151515a15a15
4817我真心希望您能从本书中得到快乐!如果您发现了错误,16或者您将代码移植到了新的系统中,16或者您只是想分享您的想法,16那么请给我发邮件:aup@basepath.15com.a...16a16c16ac161616c161616a16a16
4818MarccJ.16Rochkind17a17c17ac171717c171717a17a17
4819Boulder,18Colorado18a18c18ac181818c181818a18a18
48202004年4月19a19c19ac191919c191919a19a19