UNIX环境高级编程(第2版)(09年度畅销榜TOP50)(08年度畅销榜TOP50)
基本信息
- 作者: (美)W.Richard Stevens, Stephen A.Rago [作译者介绍]
- 译者: 尤晋元 张亚英 戚正伟
- 丛书名: 图灵程序设计丛书 操作系统
- 出版社:人民邮电出版社
- ISBN:7115147310
- 上架时间:2006-5-17
- 出版日期:2006 年5月
- 开本:16开
- 页码:758
- 版次:2-1
- 所属分类:
计算机 > 操作系统 > UNIX
教材 > 研究生/本科/专科教材 > 工学 > 计算机
教材 > 计算机教材 > 本科/研究生 > 计算机专业教材 > 计算机专业课程 > 操作系统
编辑推荐
本书是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第2版。对于所有层次UNIX/Linux程序员都是一本不可或缺的参考书。
推荐阅读
内容简介回到顶部↑
本书是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第2版。在
本书第1版出版后的十几年中,UNIX行业已经有了巨大的变化,特别是影响UNIX编程接口的有关标准变
化很大。本书在保持了前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技
术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程
关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在
此基础上介绍了多个应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附
录中给出了函数原型和部分习题的答案。
本书内容权威,概念清晰,阐述精辟,对于所有层次UNIX/Linux程序员都是一本不可或缺的参考书。
本书第1版出版后的十几年中,UNIX行业已经有了巨大的变化,特别是影响UNIX编程接口的有关标准变
化很大。本书在保持了前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技
术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程
关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在
此基础上介绍了多个应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附
录中给出了函数原型和部分习题的答案。
本书内容权威,概念清晰,阐述精辟,对于所有层次UNIX/Linux程序员都是一本不可或缺的参考书。
作译者回到顶部↑
本书提供作译者介绍
尤晋元上海交通大学计算机科学及工程系教授、博士生导师。在科研方面,主要从事操作系统和分布对象计算技术方面的研究;在教学方面,长期承担操作系统及分布计算等课程的教学工作。主编和翻译了多本操作系统教材和参考书,包括《UNIX操作系统教程》、《UNIX高级编程技术》、《UNIX环境高级
编程》和《操作系统:设计与实现》等。
张亚英博士,毕业于上海交通大学计算机软件与理论专业,现任教于同济大学计算机系。研究方向为分布与移动计算、嵌入式系统以及系统软件等。
戚正伟博士,毕业于上海.. << 查看详细
编程》和《操作系统:设计与实现》等。
张亚英博士,毕业于上海交通大学计算机软件与理论专业,现任教于同济大学计算机系。研究方向为分布与移动计算、嵌入式系统以及系统软件等。
戚正伟博士,毕业于上海.. << 查看详细
目录回到顶部↑
第1章unix基础知识1
1.1 引言1
1.2 unix体系结构1
1.3 登录1
1.4 文件和目录3
1.5 输入和输出6
1.6 程序和进程8
1.7 出错处理10
1.8 用户标识12
1.9 信号14
1.10 时间值15
1.11 系统调用和库函数16
1.12 小结17
习题18
第2章unix标准化及实现19
2.1 引言19
2.2 unix标准化19
2.2.1 iso c 19
2.2.2 ieee posix 20
2.2.3 single unix specification 25
1.1 引言1
1.2 unix体系结构1
1.3 登录1
1.4 文件和目录3
1.5 输入和输出6
1.6 程序和进程8
1.7 出错处理10
1.8 用户标识12
1.9 信号14
1.10 时间值15
1.11 系统调用和库函数16
1.12 小结17
习题18
第2章unix标准化及实现19
2.1 引言19
2.2 unix标准化19
2.2.1 iso c 19
2.2.2 ieee posix 20
2.2.3 single unix specification 25
译者序回到顶部↑
Advance Programming in the UNIX Environment 问世于1992年,作者是UNIX和网络技术领域的国际知名专家W. Richard Stevens。该书出版以来受到读者的普遍欢迎和好评,认为它是“在UNIX环境下进行程序设计的有关人员必读且经常需要查阅的首选参考书”。UNIX的原创者ennis Ritchie则称其是“公认的优秀、匠心独具的名著”。自第1版以来,UNIX系统及相关产业已经发生了很多变化,特别是UNIX相关标准的制定取得很大进展,UNIX系统采用的某些新技术已日趋成熟,典型的UNIX系统平台也有所改变,而Linux的兴起、快速发展和广泛应用更为世人瞩目。这些都使得该书有修订的必要,以反映这些变化。由于W. Richard Stevens已于1999年辞世,所以该书的出版商美国Addison Wesley公司邀请原作者的好友,同样在UNIX领域中有很深造诣的Stephen A. Rago承担了修订该书的工作。经修订后,Advance Programming in the UNIX Environment第2版于2005年出版。它既保持了原书的基本结构、内容和风格,又有一定幅度的增删,全书依据POSIX.1的最新标准改写,内容更加丰富,在线程和多线程编程以及套接字方面增加了专门章节,使用的典型平台更改为FreeBSD 5.2.1、Linux 2.4.22、Solaris 9和Darwin 7.4.0。另外Stephen A.Rago在UNIX编程方面也具有极丰富的经验,这些都非常自然地反映到了本版中。除此之外,第2版的主要特点与第1版基本相同:
(1) 内容丰富实用,包含了在UNIX环境下进行程序设计所需的各方面内容。它既能满足UNIX环境下一般程序设计人员的要求,又常常能使需要解决各种疑难问题的高级程序设计人员找到满意的答案。
(2) 提供了大量应用实例。书中既有说明单个系统调用和库函数使用方法的小程序,也有综合应用它们的较大程序。这些程序的源代码总计10 000行以上,全部用ISO C编写。
(3) 为了说明系统调用和库函数的应用技术及其可能发生的各种问题,在必要时对UNIX内核的数据结构和算法进行了说明。这种理论与应用实践的结合,非常有助于读者提高程序设计的水平。
本书的第11章、第12章以及索引由同济大学计算机系张亚英博士翻译,第16章和第21章由上海交通大学软件学院戚正伟博士翻译,上海交通大学计算机系尤晋元教授翻译了其余章节,并对全书进行统稿。本书第1版中译本于2000年出版以来,很多读者对其提出了许多宝贵意见,在本
版中我们尽量采纳了这些意见。同时,我们的工作还得到上海交通大学计算机系陈英副教授、唐新怀博士、贺小箭博士和计算机系以及软件学院许多学生(包括姜义、梁宏鑫、何巍、包云程、周绪宏、金雪骥、高少琛和陈熹等)的帮助,在此一并表示感谢。还要特别感谢人民邮电出版社图灵公司的武卫东、杨海玲等在本书的策划、编辑及出版方面所做的努力。
我们希望本书的出版对相关科技人员和读者会有所帮助,同时也期待广大专家和读者提出宝贵意见。
(1) 内容丰富实用,包含了在UNIX环境下进行程序设计所需的各方面内容。它既能满足UNIX环境下一般程序设计人员的要求,又常常能使需要解决各种疑难问题的高级程序设计人员找到满意的答案。
(2) 提供了大量应用实例。书中既有说明单个系统调用和库函数使用方法的小程序,也有综合应用它们的较大程序。这些程序的源代码总计10 000行以上,全部用ISO C编写。
(3) 为了说明系统调用和库函数的应用技术及其可能发生的各种问题,在必要时对UNIX内核的数据结构和算法进行了说明。这种理论与应用实践的结合,非常有助于读者提高程序设计的水平。
本书的第11章、第12章以及索引由同济大学计算机系张亚英博士翻译,第16章和第21章由上海交通大学软件学院戚正伟博士翻译,上海交通大学计算机系尤晋元教授翻译了其余章节,并对全书进行统稿。本书第1版中译本于2000年出版以来,很多读者对其提出了许多宝贵意见,在本
版中我们尽量采纳了这些意见。同时,我们的工作还得到上海交通大学计算机系陈英副教授、唐新怀博士、贺小箭博士和计算机系以及软件学院许多学生(包括姜义、梁宏鑫、何巍、包云程、周绪宏、金雪骥、高少琛和陈熹等)的帮助,在此一并表示感谢。还要特别感谢人民邮电出版社图灵公司的武卫东、杨海玲等在本书的策划、编辑及出版方面所做的努力。
我们希望本书的出版对相关科技人员和读者会有所帮助,同时也期待广大专家和读者提出宝贵意见。
前言回到顶部↑
本版前言
引言
我与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的移植版本,要么宣布支持Linux。Solaris可能算是硕果仅存的占有一定市场份额的UNIX系统V版本4的后裔了。
? 加州大学伯克利分校的CSRG(计算机科学研究组)在发布了4.4BSD之后,已经决定不再开发UNIX操作系统,只有几个志愿者小组还维护着一些可公开获得的版本。
? Linux受到数以千计的志愿者的支持,它的引入使任何一个拥有计算机的人都能运行类似于UNIX系统的操作系统,并且可以免费获得源代码支持哪怕最新的硬件设备。在已经存在几种免费BSD版本的情况下,Linux的成功确实是个奇迹。
? 苹果公司作为一个富有创新精神的公司,已经放弃了老的Mac操作系统,换之以一个在Mach和FreeBSD基础上开发的新系统。
因此,我已经努力更新本书中的内容,以反映这四种平台。
在Rich 1992年出版《UNIX环境高级编程》之后,我扔掉了手头几乎所有的UNIX程序员手册。这些年来,我桌上最常摆放的就是两本书,一本是字典,另一本就是《UNIX环境高级编程》。我希望读者也能认为本修订版一样有用。
对第1版的改动
Rich的书依然屹立,我试图不去改动他这本书原来的风格。但是13年间世事兴衰,尤其是影响UNIX编程接口的有关标准变化很大。
我依据标准化组织的标准,更新了全书相关的接口方面的内容。第2章改动较大,因为它主要是讨论标准的。本书第1版是根据POSIX.1标准的1990年版写的,本修订版依据2001年版的新标准,内容要丰富很多。1990年ISO的C标准在1999年也更新了,有些改动影响到POSIX.1标准中的接口。
目前的POSIX.1规范涵盖了更多的接口。The Open Group(原称X/Open)发布的“SingleUNIX Specification”的基本规范现在已经并入POSIX.1,后者包含了几个1003.1标准和另外几个标准草案,原来这些标准是分开出版的。
我也相应地增加了些章节讨论新主题。线程和多线程编程是相当重要的概念,因为它们为程序员处理并发和异步提供了更清晰的方式。
套接字接口现在也是POSIX.1的一部分了。它为进程间通信(IPC)提供了单一的接口,而不考虑进程的位置。它成为IPC章节的自然扩展。
我省略了POSIX.1中的大部分实时接口。这些内容最好是在一本专门讲述实时编程的书中介绍。参考文献里有一本这方面的书。
我把最后面几章的案例研究也更新了,用了更接近现实的例子。例如,现在很少有系统通过串口或并口连接PostScript打印机了,多数PostScript打印机是通过网络连接的,所以我对PostScript打印机通信的例子做了修改。
有关调制解调器通信的那一章如今已经不太适用了。原始材料我们保留在本书网站上,有两种格式:PostScript(http://www.apuebook.com/lostchapter/modem.ps)和PDF(http://www.apuebook.com/lostchapter/modem.pdf)。
书中实例的源代码也可以从www.apuebook.com上获得。多数实例已经在下述四种平台上运行过:
(1) FreeBSD 5.2.1,这是加州大学伯克利分校CSRG的4.4BSD的一个变种,在英特尔奔腾处理器上运行。
引言
我与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的移植版本,要么宣布支持Linux。Solaris可能算是硕果仅存的占有一定市场份额的UNIX系统V版本4的后裔了。
? 加州大学伯克利分校的CSRG(计算机科学研究组)在发布了4.4BSD之后,已经决定不再开发UNIX操作系统,只有几个志愿者小组还维护着一些可公开获得的版本。
? Linux受到数以千计的志愿者的支持,它的引入使任何一个拥有计算机的人都能运行类似于UNIX系统的操作系统,并且可以免费获得源代码支持哪怕最新的硬件设备。在已经存在几种免费BSD版本的情况下,Linux的成功确实是个奇迹。
? 苹果公司作为一个富有创新精神的公司,已经放弃了老的Mac操作系统,换之以一个在Mach和FreeBSD基础上开发的新系统。
因此,我已经努力更新本书中的内容,以反映这四种平台。
在Rich 1992年出版《UNIX环境高级编程》之后,我扔掉了手头几乎所有的UNIX程序员手册。这些年来,我桌上最常摆放的就是两本书,一本是字典,另一本就是《UNIX环境高级编程》。我希望读者也能认为本修订版一样有用。
对第1版的改动
Rich的书依然屹立,我试图不去改动他这本书原来的风格。但是13年间世事兴衰,尤其是影响UNIX编程接口的有关标准变化很大。
我依据标准化组织的标准,更新了全书相关的接口方面的内容。第2章改动较大,因为它主要是讨论标准的。本书第1版是根据POSIX.1标准的1990年版写的,本修订版依据2001年版的新标准,内容要丰富很多。1990年ISO的C标准在1999年也更新了,有些改动影响到POSIX.1标准中的接口。
目前的POSIX.1规范涵盖了更多的接口。The Open Group(原称X/Open)发布的“SingleUNIX Specification”的基本规范现在已经并入POSIX.1,后者包含了几个1003.1标准和另外几个标准草案,原来这些标准是分开出版的。
我也相应地增加了些章节讨论新主题。线程和多线程编程是相当重要的概念,因为它们为程序员处理并发和异步提供了更清晰的方式。
套接字接口现在也是POSIX.1的一部分了。它为进程间通信(IPC)提供了单一的接口,而不考虑进程的位置。它成为IPC章节的自然扩展。
我省略了POSIX.1中的大部分实时接口。这些内容最好是在一本专门讲述实时编程的书中介绍。参考文献里有一本这方面的书。
我把最后面几章的案例研究也更新了,用了更接近现实的例子。例如,现在很少有系统通过串口或并口连接PostScript打印机了,多数PostScript打印机是通过网络连接的,所以我对PostScript打印机通信的例子做了修改。
有关调制解调器通信的那一章如今已经不太适用了。原始材料我们保留在本书网站上,有两种格式:PostScript(http://www.apuebook.com/lostchapter/modem.ps)和PDF(http://www.apuebook.com/lostchapter/modem.pdf)。
书中实例的源代码也可以从www.apuebook.com上获得。多数实例已经在下述四种平台上运行过:
(1) FreeBSD 5.2.1,这是加州大学伯克利分校CSRG的4.4BSD的一个变种,在英特尔奔腾处理器上运行。
序言回到顶部↑
我差不多每次在接受专访当中,或是做技术讲座后的提问时间里,总会被问及这样一个问题:“你想到过UNIX会生存这么长时间吗?”自然,每次的回答都是:没有,我们没想到会是这样。
从某种角度说,UNIX系统已经伴随了商用计算行业历史的大半,而这也早就不是什么新闻了。发展的历程错综复杂,充满变数。自20世纪70年代初以来,计算机技术经历了沧海桑田般的变化,尤其体现在网络技术的普遍应用、图形化的无所不在和个人计算的触手可及,然而UNIX系统却奇迹般地容纳和适应了所有这些变化。虽然商业应用环境在桌面领域目前仍然为微软和英特尔所统治,但是在某些方面已经从单一供应商向多种来源转变,近年来对公共标准和免费开放资源的信赖已经与日俱增。
UNIX作为一种现象而不单是商标品牌,有幸能与时俱进,乃至领导潮流。在20世纪70~80年代,AT&T虽对UNIX的实际源代码进行了版权保护,但却鼓励在系统的接口和语言基础上进行标准化的工作。例如,AT&T发布了SVID(System V Interface Definition,系统V接口定义),这成为POSIX及其后续工作的基础。后来,UNIX可以说相当优雅地适应了网络环境,虽不那么轻巧却也充分地适应了图形环境。再往后,开源运动的技术基础中集成了UNIX的基本内核接口和许多它独特的用户级工具。
即使在UNIX软件系统本身还是专有的时候,鼓励出版UNIX系统方面的论文和书籍也是至关重要的,著名的例子就是Maurice Bach的《UNIX操作系统设计》一书。其实我要说明的是,UNIX长寿的主要原因是,它吸引了极具天分的技术作者,为大众解读它的优美和神秘所在。Brian Kernighan是其中之一,Rich Stevens自然也是。本书第1版连同Stevens所著的系列网络技术书籍,被公认为优秀的、匠心独具的名著,成为极其畅销的作品。
然而,本书第1版毕竟出版时间太早了,那时还没有出现Linux,源自伯克利CSRG的UNIX接口的开源版本还没有广为流行,很多人的网络还在用串行调制解调器。Steve Rago认真仔细地更新了本书,以反映所有这些技术进展,同时还考虑到各种ISO标准和IEEE标准这些年来的变化。因此,他的例子是最新的,也是最新测试过的。
总之,这是一本弥足珍贵的经典著作的更新版。
Dennis Ritchie
2005年3月于新泽西州Murray Hill市
从某种角度说,UNIX系统已经伴随了商用计算行业历史的大半,而这也早就不是什么新闻了。发展的历程错综复杂,充满变数。自20世纪70年代初以来,计算机技术经历了沧海桑田般的变化,尤其体现在网络技术的普遍应用、图形化的无所不在和个人计算的触手可及,然而UNIX系统却奇迹般地容纳和适应了所有这些变化。虽然商业应用环境在桌面领域目前仍然为微软和英特尔所统治,但是在某些方面已经从单一供应商向多种来源转变,近年来对公共标准和免费开放资源的信赖已经与日俱增。
UNIX作为一种现象而不单是商标品牌,有幸能与时俱进,乃至领导潮流。在20世纪70~80年代,AT&T虽对UNIX的实际源代码进行了版权保护,但却鼓励在系统的接口和语言基础上进行标准化的工作。例如,AT&T发布了SVID(System V Interface Definition,系统V接口定义),这成为POSIX及其后续工作的基础。后来,UNIX可以说相当优雅地适应了网络环境,虽不那么轻巧却也充分地适应了图形环境。再往后,开源运动的技术基础中集成了UNIX的基本内核接口和许多它独特的用户级工具。
即使在UNIX软件系统本身还是专有的时候,鼓励出版UNIX系统方面的论文和书籍也是至关重要的,著名的例子就是Maurice Bach的《UNIX操作系统设计》一书。其实我要说明的是,UNIX长寿的主要原因是,它吸引了极具天分的技术作者,为大众解读它的优美和神秘所在。Brian Kernighan是其中之一,Rich Stevens自然也是。本书第1版连同Stevens所著的系列网络技术书籍,被公认为优秀的、匠心独具的名著,成为极其畅销的作品。
然而,本书第1版毕竟出版时间太早了,那时还没有出现Linux,源自伯克利CSRG的UNIX接口的开源版本还没有广为流行,很多人的网络还在用串行调制解调器。Steve Rago认真仔细地更新了本书,以反映所有这些技术进展,同时还考虑到各种ISO标准和IEEE标准这些年来的变化。因此,他的例子是最新的,也是最新测试过的。
总之,这是一本弥足珍贵的经典著作的更新版。
Dennis Ritchie
2005年3月于新泽西州Murray Hill市


点击看大图







加载中...
