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

本书探讨了UNIX系统的长期生命力及其对现代计算的影响。从早期版本到Linux的兴起,本书覆盖了系统V、BSD和开源运动的历史背景。此外,还介绍了编程接口标准的发展,包括线程、套接字及多线程编程等关键概念。

我差不多每次在接受专访当中,或是做技术讲座后的提问时间里,总会被问及这样一个问题:“你想到过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

本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、 进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库, PostScript 打印机驱动程序,调制解调器拨号器及在伪终端上运行其他程序的程序等。 本书内容丰富权威, 概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士 —都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 登录名 1 1.2.2 shell 1 1.3 文件和目录 2 1.3.1 文件系统 2 1.3.2 文件名 2 1.3.3 路径名 2 1.3.4 工作目录 4 1.3.5 起始目录 4 1.4 输入和输出 5 1.4.1 文件描述符 5 1.4.2 标准输入、标准输出和标准 出错 5 1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 用户标识 11 1.8.1 用户ID 11 1.8.2 组ID 12 1.8.3 添加组ID 12 1.9 信号 12 1.10 UNIX时间值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 2.5 限制 21 2.5.1 ANSI C限制 22 2.5.2 POSIX限制 22 2.5.3 XPG3限制 24 2.5.4 sysconf、pathconf 和fpathconf 函数 24 2.5.5 FIPS 151-1要求 28 2.5.6 限制总结 28 2.5.7 未确定的运行时间限制 29 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之间的冲突 33 2.9 小结 34 习题 34 第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置--ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时间 76 4.19 utime函数 78 4.20 mkdir和rmdir函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值