操作系统是计算机最重要的系统软件。Unix操作系统历经了几十年,至今仍是主流的操作系统。本书通过解释Unix的工作原理,循序渐进地讲解实现Unix中系统命令的方法,让读者理解并逐步精通Unix系统编程,进而具有编制Unix应用程序的能力。书中采用启发式、举一反三、图示讲解等多种方法讲授,语言生动、结构合理、易于理解。每一章后均附有大量的习题和编程练习,以供参考。\r\n 本书适合作为高等院校计算机及相关专业的教材和教学参考书,亦可作为有一定系统编程基础的开发人员的自学教材和参考手册。
第1章 Unix系统编程概述\r\n 1.1 介绍\r\n 1.2 什么是系统编程\r\n 1.2.1 简单的程序模型\r\n 1.2.2 系统模型\r\n 1.2.3 操作系统的职责\r\n 1.2.4 为程序提供服务\r\n 1.3 理解系统编程\r\n 1.3.1 系统资源\r\n 1.3.2 目标:理解系统编程\r\n 1.3.3 方法:通过三个问题来理解\r\n 1.4 从用户的角度来理解Unix\r\n 1.4.1 Unix能做些什么\r\n 1.4.2 登录--运行程序--注销\r\n 1.4.3 目录操作\r\n 1.4.4 文件操作\r\n 1.5 从系统的角度来看Unix\r\n 1.5.1 用户和程序之间的连接方式\r\n 1.5.2 网络桥牌\r\n 1.5.3 bc:Unix的计算器\r\n 1.5.4 从bc/dc到Web\r\n 1.6 动手实践\r\n 1.7 工作步骤与概要图\r\n 1.7.1 接下来的工作步骤\r\n 1.7.2 Unix的概要图\r\n 1.7.3 Unix的发展历程\r\n小结\r\n第2章 用户、文件操作与联机帮助:编写who命令\r\n 2.1 介绍\r\n 2.2 关于命令who\r\n 2.3 问题1:who命令能做些什么\r\n 2.4 问题2:who命令是如何工作的\r\n 2.5 问题3:如何编写who\r\n 2.5.1 问题:如何从文件中读取数据结构\r\n 2.5.2 答案:使用open、read和close\r\n 2.5.3 编写wh01.c\r\n 2.5.4 显示登录信息\r\n 2.5.5 编写wh02.c\r\n 2.5.6 回顾与展望\r\n 2.6 编写cp(读和写)\r\n 2.6.1 问题1:cp命令能做些什么\r\n 2.6.2 问题2:cp命令是如何创建/重写文件的\r\n 2.6.3 问题3:如何编写cp\r\n 2.6.4 Unix编程看起来好像很简单\r\n 2.7 提高文件I/O效率的方法:使用缓冲\r\n 2.7.1 缓冲区的大小对性能的影响\r\n 2.7.2 为什么系统调用需要很多时间\r\n 2.7.3 低效率的wh02.c\r\n 2.7.4 在wh02.c中运用缓冲技术\r\n 2.8 内核缓冲技术\r\n 2.9 文件读写\r\n 2.9.1 注销过程:做了些什么\r\n 2.9.2 注销过程:如何工作的\r\n 2.9.3 改变文件的当前位置\r\n 2.9.4 编写终端注销的代码\r\n 2.10 处理系统调用中的错误\r\n 小结\r\n第3章 目录与文件属性:编写ls\r\n 3.1 介绍\r\n 3.2 问题1:1s命令能做什么\r\n 3.2.1 1s可以列出文件名和文件的属性\r\n 3.2.2 列出指定目录或文件的信息\r\n 3.2.3 经常用到的命令行选项\r\n 3.2.4 问题1的答案\r\n 3.3 文件树\r\n 3.4 问题2:1s是如何工作的\r\n 3.4.1 什么是目录\r\n 3.4.2 是否可以用open、read和close来操作目录\r\n 3.4.3 如何读目录的内容\r\n ……\r\n第4章 文件系统:编写pwd\r\n第5章 连接控制:学3]stty\r\n第6章 为用户编程:终端控制和信号\r\n第7章 事件驱动编程:编写一个视频游戏\r\n第8章 进程和程序:编写命令解释器sh\r\n第9章 可编程的shell、shell变量和环境:编写自己的shell.\r\n第10章 I/O重定向和管道\r\n第11章 连接到近端或远端的进程:服务器与Socket(套接宇)\r\n第12章 连接和协议:编写Web服务器\r\n第13章 基于数据报(Datagram)的编程:编写许可证服务器\r\n第14章 线程机制:并发函数的使用\r\n第15章 进程间通信(1PC)
操作系统是计算机最重要的系统软件,是计算机应用的基础。Unix系统是迄今最优秀的操作系统,虽历经几十年,有许多变化,但基本的体系结构保持稳定。更难能可贵的是,在计算机发展如此迅速的今天,Unix系统仍以其安全、稳定及强大的处理能力,仍为最主要的操作系统,计算机技术发展到今天,很多关键应用还依赖于Unix系统。
本书从解释Unix的工作原理、讲解系统命令的功能人手,由浅入深,抽丝剥茧般地将Unix系统的实现机理逐渐展示给读者,同时针对不同的实现方法展开了深入的讨论。书中用大量的篇幅剖析了多个Unix系统命令的实现方法,循序渐进地让读者理解并逐步精通Unix系统编程,进而具有编制Unix应用程序的能力。书中采用启发式、举一反三、类比分析、图示讲解等多种方法讲授,语言生动、结构合理、易于理解。每一章后均附有大量的习题和编程练习,读者可以参考练习。本书十分适合初学者阅读,各章总是先给出一个最简单的例子,然后不断地加入新的特性,最终达到实用的程度。通过这种方法,使读者对系统的理解逐步深入。但这并不影响本书的深度,书中涉及了很多Unix的高级特性,并进行了深入浅出、入木三分的分析,相信资深的开发人员也能够从中获益。
本书适合作为高等院校计算机及相关专业的教材和教学参考书,亦可作为有一定系统编程基础的开发人员的自学教材和参考手册。
在本书的翻译过程中,除杨宗源、黄海涛外,嵇海明、朱羚、徐国庆、莫杰众、李晶、陈玲、许峰兵、查冰等也参与了部分翻译和校对工作。限于译者的水平,译文中定有错误和不妥之处,恳请读者指正。
2004年2月于上海
Bruce Molay,哈佛大学著名教授,从事Unix系统编程和教学十余年之久,本书就是在哈佛继续教育学院的Unix systim Programming课程的基础上,结合作者的实践、教学经验编写而成。
理解Unix编程
关于Unix
写作本书的目的是解释Unix的工作原理以及如何编写Unix系统程序。Unix诞生30年来,至今仍在进行着不断的改进,并且变得越来越复杂。但它并未因此而难以理解,最初的基本结构和设计原则仍然适用。通过理解它的结构、原理和历史,读者可以阅读、加强和增添不断积累起来的巨大的Unix程序库。同时,在这个过程中,相信读者也可以感受到许多乐趣。
为了使讲解更加清晰明了,书中采用了图片、类推、伪代码、源代码、实验、练习和特性点等多种形式。而且这些讲解内容都是从实际的问题和项目中提炼出来的。
本书的适用对象
阅读本书的读者要有一定的C语言基础。如果已经学过C++,理解书中的代码将会更加容易,并会很快适应本书。读者应该了解数组、结构、指针和链表的概念,并具有用它们阅读和编写程序的能力。
但这里并不要求读者用过Unix,也不要求读者了解操作系统的内核原理。在每一章的开头都首先讲解Unix的用户级特性。通过“该命令有什么功能?”这个问题很自然地将读者引向了另外一个系统级的问题“该功能是如何实现的?”。
学习过程中,需要读者登录Unix系统并亲自做一些实验。
可以学到什么
书中介绍了Unix系统的组成部分,并讲解了它们的功能、工作原理及如何使用它们进行编程。在这个过程中,读者还可以领悟到这些组件是怎样组合成这个统一、智能的操作系统的。
本书源于我从1990年开始在哈佛大学职业教育学院(Harvard Extension Sch001)执教的一门课程——Unix系统编程。在课程评估和毕业几年后学生给我发来的邮件中,学生们向我描述了他们在这门课中学到的东西,一个学生说这门课给了他“通往国王宝座的钥匙”。无论用户级、系统级还是理论级,他对Unix都有了很好的理解,他觉得他已经可以应对各个方面的情况,并可以解决所碰到的大多数问题。还有一个学习过这门课程的内科医生,他说他很喜欢这种实例教学法,并将其比作见习医生在医院里通过实际病例来学习。
还有一个毕业后在开放软件公司担任项目主管的学生说,这门课使他掌握了他在工作中所需的知识和技能。
适用的Unix版本
本书适用于包括GNU和Linux在内的几乎所有的Unix版本。书中重点讲述构成所有Unix版本基础的结构和技能,而不是随各个版本变化的具体细节。只要掌握了这些基本知识,那些细节的学习将会很容易上手。答谢
这本书的写成得益于许多朋友的帮助。
感谢PetraRecter为我提供了这样一个机会并在这项课题中给了我诸多指导,也要感谢GregoryDulles,他和我共同完成了实例方面的工作。
我要感谢本书初稿的审阅者们,他们给出了许多关切、鼓励。和具体建议,他们是BenAbbott、John B.Connely、Geoff Sutcliffe、Louis Taber、Sam R,Thangiah和Lawrence B.Wells。也要感谢提供了图片软件重要信息的PeggyBustamante和AmitChatterjee,以及在整个项目过程中无数次与我沟通给我精神和实际支持的YurikoKuwabara。
我感谢在Unix编程课程中学习的许多学生和助教们,他们在讨论课中的问题、观点以及与我在个别指导过程中的谈话,对构成本书的整体框架、讲解、比喻和图片等方面都起到了很大的作用。尤其要感谢的是多年来一直作为助教的LarrydeLuca以及他为第13章提供的材料。