1. 首页
  2. 操作系统
  3. Linux
  4. Unix编程环境(中文版。pdf)

Unix编程环境(中文版。pdf)

上传者: 2019-09-03 06:08:32上传 PDF文件 500kb 热度 39次
详细介绍了关于Unix的编程的相关知识,是值得一看的好书!译者序UNIⅨX是当代计算机操作系统的一个成功典范。从计算机操作系统的发展史来肴,UNIX超过了以往所有的操作系统,取得了前所未有的成功UNIX系统的诞生己经有30年了。许多操作系统在这期间早已寿终正寝,然而没有一位计算机工作者会预占UNK在可见的今后年代中走下坡路。UNX不仅在操作系统发展的历史上具有里程碑作用,而且,它在学术上和教学中也是人们首先研究和探讨的为数不多的操作系统之…。UNIX极大地推动了操作系统理论的发展,是所有计算机院校、系所必须开设和研讨的一门课程UNIX不仅在学术上取得了成功,多年来,它在商业上的成功也是极为出色的。成百万台的机器在运行着它。而近年来,随着互联网的迅猛发展,它的装机量更是可观,而更重要的是,凡是重要的互联上的站点,几乎都把UNIX作为首选的web服务器操作系统。从这些事实来看,UNX的重要性是不言而喻的。与其他系统不同的一点是,UNX的成功和C语言的成功密不可分。UNIX自身就是C高级程序设计语言的编程典范。UNX推动了C话言的应用和普及,而C语言又反过来促进了UNIX在更广阔领域里的成功。如今,世界正处于世纪之交,随着Iiux操作系统在 Internet b的出现,人们又一次看到UNX操作系统的新的高峰出现在我们面前。 Linux是“ ree uNIX”,即免费的UNIX。 Linux遵从国际上相关组织制定的UNK标准,即 POSIX。它的结构、功能以及界面都与经典的UNX并无二致。Lnux不但继∫UNIX的全部优点,而且还增加了一条其他操作系统不曾具备的优点,即Linu操作系统源码全部开放。从某种意义上讲, Linux是UNIX在国际互联网环境下的一次新廾。想要学习90年代的 Linux吗?请从UNIX开始,请从这本书开始。应该说本书不是一本普通的有关UNX的书籍。本书的写作凵期是1984年,十多年岁月的考验更显露其华彩。在书籍的海洋中,本书是有关UNIX编程环境的一本举世公认的经典著作迄今为止,在这个领域中,还没有其他的书能够替代它。这是一本深入浅出地讲解如何在UNIX环境下进行程序设计的优秀籍。书中引用大量编程实例,由浅入深地讲解如何使用UNIX及其各种工具,以及如何用C语言在UNIX环境下写出高质量的程序来。正因为本书的重要价值,所以在国际上,许多一流大学的相关专业都采用木书作为首选教科书想要成为一名UNIX系统上的程序设计高手吗?请仔细阅读本书,并上机实践。想要掌握C语占的精妙技巧吗?请在机器上试验本书中的实例并尝试做出改进本书对初学者也同样适用。跟随木书的讲解,一边学丬,一边上机实践,初学者就一定会成为编程好手。本适合作为大专院校相关专业的教科书。对于想深入掌操UNX和C语言的程序设计人员,以及想学习和掌握 Linux的人员,本书也不失为一木难得的参考书。参加夲书翻译E作的还有:张乃琳、李茹、汤斂、梦秋、叶松和翁念龙。由于时间有限,书中难免有误,请读者指出,以便再版时改正。1999年2月于北京序言“UNIX安装的数量已经増至10台,超过了预期。”UNⅨX程序员手册》,第2版,1972年6月UNIX°操作系统于1969年首次在尔实验室台闲置的 DEC PDP7计算机上启用。当时,Ken Thompson从 Rudd Canaday、 Doug Mcllroy、 Joe Ossanna和 Dennis ritchie处得到启示,并在他们的攴持下,编写∫小型通用分时系统,其适用性好、可信度高,吸引了热心的用户并最终装备在…台较大的计算机—PDP-11/20上。系统早期的用户之一是 Ritchie,他在1970年曾帮助将该系统转到PDP-1l计算机上。 Ritchie也曾设计和编写了C程序语音的编译程序。1973年, Ritchie和 Thompson用C话言重写了UNⅸX核心,打破了系统软件用汇编语言编写的传统。经过此次重写,该系统最终成为今天必不可少的操作系统大约在1974年,UNX获准进入大学“用于教育目的”,而且,几年之后便进入了商业领域。在此期间,UNX系统在贝尔实验室日益发展状大,成易地进入到实验室、软件开发项目字处理中心和电话公司运行支持系统。从那时起,UNIX开始向全球扩散,从微型计算机到大型机,已安装了数以万计的UNIX系统。是什么促使UNIX系统如此成功呢?首先,由于是用C语言编写,因此它是可移植的UNIX系统的运行范围可以从微型机到大型机,这是一个强大的商业优势。第…,源代码是用高级语言编写的,且很容易得到,从而使系统容易适应特殊的需求。最后,也是最重要的点,它是一个良好的操作系统,特别是对程序员而言。UNIX编程环境非常丰富而且容易取得成效。尽管UNX系统引入了很多创新的程序和技术,但并非其中某个单独的程序或想法使得工作完美无缺。相反,是程序设计的方法,即应用计算机的基本原则使系统富有成效。虽然这个基本原则不能用一句话概括,但其核心就是,系统的能力更多地来自程序之间的关系,而不是程序本身。许多单独的UNX程序只能完成相当简单的工作,然而,在与其他程序结合起来使用时,它们就成为通用而有效的上具。本书的目的是传授UNX程序设计的基本原则,由于这个基本原则是以程序间的关系为基础的,因此,除了程序组合和运用程序进行创建程序的主题外,我们还用了大量篇幅对单个具进行讨论。要想很好地使用UNX系统及其组成部件,不仅必须了解如何使用程序,还要了解它们是怎样与环境相匹配的尽管UNIⅨX系统得到了广泛应用,但精通的用户却越来越难找到。我们经常发现富有经验的用户(包括我们自己在内)只能找到问题的笨解法,或者只会写程序做现有的丁具易于处理的I作。当然,没有·定的经验和对其透彻的理解,更不易获得精巧的解法。我们希望无论是新手还是老用户,通过阅读本书,都能够增强理解力,从而使系统的使用更加有效和有趣UNIX是贝尔实验宝的商标。“UNX”不是首字烘缩拼训,它是·个同 MULTICS稍微有联系的双关语,存UNX之前, Thompson和 Ritchie使用 MULTICS操作系统。希望读者更好地使用UNIX。我们把焦点对准程序员,希望通过本书的学习,能使其工作更有效,从而也使程序组的工作更有成果。尽管我们的主要对象是程序员,但学习本书的前4章或前5章并不需要具有编程经验,因此,对于其他读者来说,本书也是很有帮助的我们尽可能尝试使用真实的而不是假设的例∫,来表述我们的观点。有些程序尽管在书中作为实例,但也可成为常用程序的一部分。所有实例都经过了机器可读格式文本的直接测试本书的编排如下。第1章为系统使用的基础入门。其中包括登录、邮件、文件系统、常用命令和命令解释的基本原理。有经验的用户可以略过此章。第2章讨论UNIX文件系统。文件系统是系统操作和使用的核心,因此必须充分理解才能更好地使用。这…章讲述文件和目录、容许权限和文件模式以及I节点。章末是文件系统层次的浏览和设备文件的解释。命令解释程序,即shel,是一个基本T具,不仅用于执行程序,也用于编写程序。第3章讲述怎样按要求使用she:创建新命令、命令变量、shel变量、基本控制流和输入输出重定向。第4章介绍过滤程序,它是当数据流通过时,对数据执行简单转换的程序。首先涉及grep模式搜索命令和其对应程序;接下来讨论诸如sor的一些更多的常用过滤程序;其余部分重点讨论两个通用数据转换程序,称为sed和 awk sed是流编辑程序,是当数据流通过时,作出编辑更改的一个程序。awk是用于简单信息检索和报生成任务的一种编程语言。使用这些程序,有时再加以与shel的配合,常常能完全避免流于常规的程序设计。第5章讨论如何使用shel!程,以供他人使用。主:要内容包括更高级的控制流和变量、陷阱和中断处理。本章的实例充分利用了sed、awk和 Ishell至此读者将完全领会运用shel和其他现有程序所能进行的工作。第6章讲述有关运用标准I/O库编写新程序的内容。这些程序用C语言编写,我们假设读者了解或至少最近学过C语言我们会展示用于设计和组织新程序的实用策略,介绍怎样用易于管理的步骤创建程序和如何利用现有的工具。第7章涉及系统调用,这是其他所有软件层的基砷,主要内容包括输入输出、文件创建出错处理、目录、I节点、进程和信号。笔8章讨论程序开发工具。yacc是一种语法分析程序生成器;make可以控制编译大程序的过程;lex可以生成词法分析程序。上述讨论是以一个大程序的开发为基础的,该大程序是种类似C语言的可編程计算器。第9章讨论文档处理工具,本章可以独立于其他章节阅读附录A概括了标准编辑器ed。尽管许多读者日常工作屮喜欢运用其他编辑器,但ed是非常通用、有益而且高效的。它的正则表达式是其他程序(如grp和sed)的核心,而且只为此理出就值得一读附录B是用于第8章计算器语言的参考手册附录C是计算器程序最后版本,列出了所有的源代码以便于阅读另外,还有一些实用的内容。首先,UNⅨX系统的使用已经很茁遍,有多种广泛应用的版本。例如,第7版出自UNIX系统的发源地——贝尔实验室计算机科学硏究中心。系统I和系统Ⅴ是贝尔实验室支持的正式版本。加利福尼亚大学 Berkeley分校提供的系统源自第7版,通常称为UCB4xBSD。另外,特别是对于小型计算机,有大量变种UNX系统,它们也是从第7版派生的。我们尽可能地把不同版本中完全一致的内容放在一起,来对付这些版差异。尽管我们将要讲授的课程是独立于任何特定版本的,但对于特定的细节,我们选择了和第7版中有关内容一致的描述,因为它构成了丿泛应用的绝大多数UNX系统的基础。我们也已经在贝尔实验室的系统V上和 Berkeley4.1BSD中运用了这些例子;只需做一些轻微的改动,而且改动只限于少数例了。不管机器运用何种版木,读者会发现其间的差异是很小的其次,虽然本书中有很多参考资料,但它不是…本参考手册。我们知道讲授使用、方法和风格要比仅仪讲授细节重要得多。《UNX程序员手册》是信息的标准来源,书中的许多参见内容是指参见这个手册。读者需要使用手册去解决那些没有包含在本书中的问题,或者检测读者的系统与本书作者的系统之间的不同之处。最后,我们相信,实践出真知。本书应在终端旁阅读,这样便于对所讲的内容进行实验检査或者指正,探索其局限和变化。请边阅读、边实践,再回顾小结,然后进一步地阅读我们相信,尽管UNⅨX系统不是完美无缺的,但它是一个相当优秀的计算机环境,我们希望通过对本书的阅读,读者也得出这一结论Brian KernighanRob pike目录译者序14.5剪裁环境26序言5UNX系统的其余部分28第1章初学UNIX第2章文件系统30.1起步21文件系统的基础301.1.1有关终端和击键的…些2.2文件结构…33预备知识………23日录和文件名351.12与UNIX会话24权限7113登录25I节点………41.14键入命令…2.6日录层次45t.15异常的终端行为27设备471.1.6键入错误4第3章shel使用51.1.7继续键入3.1命令行结构1.1.8中止程序32元符1.1.9注销3.3创建新命令571.1.10邮件…34命令参数1.111用户间通信…35程序输出作为参数新闻36she变量31.1.13手册3.7进一步讨论ⅣO重定向661.1.14计算机辅助教学…38sheH程序里的循环68.1.15游戏…………3.9 bundle合并12文件和常用命令……3.0为什么说shel是可编程的…7I1.2.1创建文件第4章过程序21.22列出文件4.1grep系列·721.2.3打印文件…4.2其他过滤程序751.24移动、复制和删除文件4.3流编辑程序sed7725文件名44模式描与处理语言awk86有用的命令4.41宇段8227文件系统命令小结154.4.2打印…13日录164.4.3模式831.4 shell19444 BEGIN与END模式841.4.1文件名简写944.5算术运算与变量841.4.2IO重定向214.4.6控制流…………14.3管道…234.4.7数组87144进程444.8关联数纠88VII44.9符串…897.5信号和中断16444.10与she交互作用第8章程序开发………l6944.l1基于awk的日历服务918.1第一阶段:四功能计算器7694.4.12附注…9481.1语法7045好的文件与过滤程序8.1.2yacc概述…………I70第5章shel编程68.1.3第一阶段的程序/7151定制cal命令…96814在程序中增加单月减745.2 which命令鲁L■■画D山…0081.5关于Emakel7553 while和unti循环i0482第二阶段:变量和错误恢复7554tap:捕获中断l0983第阶段:任意变量名和内部函数…7855 overwrite:改写文件11083.1再谈make845.6zap:使用名宇终止进程l1483.2关于lex…18557pck命令:空格和参数84第四阶段:编译成机器l8758news命令:社团服务信息n188.5第五阶段:挖制流和关系运算符……/9359get和put:追踪文件变动8.6第六阶段:函数、过程和/O975.10小结1248.7性能评价205第6章使用标准IO编程……l2688小结206.1vis:标准IO26第9章文档处理…62ⅵis第2版:程序参数1289.1宏程序包ms…2096.3ⅵis第3版:访问文件…1309.1.1阵列文本…口■21164p:一次显示一屏l33912改变字体……2126.5 pick13791,3共他命令2l266错误与调试……1379.1.4宏程序包mm2f4399.2 troff…2468idi:交互式文件比较程序14192.1字符………2l469获取环境变量…∴…145922改变字体和尺寸215第7章UNX系统调用…I47923基本ro命令…2167.1低级I/O…}47924定义宏2177.1.1文件描述符1479.3tb和eq预处理程序21771.2文件I/O·l4893.1表格2187.13创建文件749932数学表达式2197.1.4错误处理15r93.3输出22071.5随机访…l5194排印手册2227.2文件系统:日录529.5其他文档处理工具22573文件系统:「节点…56第10章结束语…22874进程·60附录A编辑器概述……2307.4.1创建低级进程i60附录Bhoc手册23974.2挖制进程…6附录Choc清单243第1章初学UNX什么是UNⅹ?狭义地看,它是一个分时操作系统内核,即一个控制计算机的资源并分配给用户的程序。它让用户运行其程序;它控制与机器连接的外围设备(硬盘、终端、打印杋等等);它提供一个文件系统用以管理诸如程序、数据及文档一类信息的长期存储。广文地看,UNIX通常不仅包含内核,还包括一些基本程序,诸如编译器、编辑器、命令语言、用于复制和打印文件的程序等从更广的角度来看,UNX可以包括由用户开发的、用于运行用户定制系统的程序,如文档处理工具、统讨分析程序以及图像软件包。这些有关UNIX的解释究竞正确与否,取决于读者所面对系统的应用级别。本书其他部分提到UNX时,会在上下文指示其内在含义。UNIX系统有时看起来比实际上更复杂—对于新用户而言,很难以最伟方式使用可用资源。所幸它并不难入门」—一只要了解很少的几个程序,就可以开始工作了。本章帮助读者尽快地学会使用UNIX系统,是概述,而不是手册;后续的章节将详细介绍各种内容。木章涉及以下主要内容:基本操作——登录和退出、简单的命令、纠正输入错误、邮件及终端间通信·日常使用——文件及文件系统、文件打印、目录以及常用命令。命令解释器或 shell-文件名缩写、输入输出重定向、管道、删字符及消行符设置、命令査询路径定义如果你用过UNIX,那么对本章的多数内容应该是熟悉的,可以直接跳至第2章即使阅读本章,也需要份巛Unx程序员于册》。对作者而言,出诉你翻阅手册中的某些内容,比在书中重复这些内容更为方便。本书不是为了替代手册,而是为了教会你更好地使用手册中的命令。另外,本书中所叙述的内容可能同你所使用的系统有所差别。在手册中的开始处有索引,可以协助找出解决某一问题的程序;应学会如何使用它。最后,有一句忠告:不要害怕做试验。如果你是初学者,那么放心,不会出现伤害自身或其他用户的事。要通过试验了解事物原理。本章篇幅较长,最好的方法是一次读几页,并在学习过程中不断试捡1起步1.1.1有关终端和击键的一些预备知识为了避免繁冗解释有关计算机使用的所有事项,作者假定你已经熟悉计算机终端,并知道使用方法。如果刈下面的叙述迷惑不解,请询问身旁的专家们UNIX系统是全双「的:你在键盘上敲入的字符送至系统,然后系统回送给终端并在屏幕上显示出来。通常echo进程把字符直接复制到屏幕上,这样就可以看到所输亼的是什么。是有的时候,比如在键入保密∏令时,echo关闭,字符就不会在屏幕上显示出来。多数键盘字符是普通字符,没有什么特殊的含义。但有些字符是通知计算机怎样解释所2UN编程环境键入的内容的。到H前为止,这些键中最重要的是 Return键。 Return键说明一行输入的结束;系统作出反应并把屏幕上的光标移到一行的起始处。必须按下 Return键后,系统才会对键入的字符作出解释。Return键是一种控制字符—即不可见的字符,它控制着终端上输入输出的某种状况。在任一台终端上, Return都有自己的按键,但是其他大多数控制字符并非如此。相反,它们必须通过按住Cono键(Cono键有时被称作为Ct键、Cnt键或Ctrl键),同时按下另个键,通常是个字母来输人。例如, Return可以通过按下 Return键输入,或者,按住 Contro键并键入m键。所以 Return键又可称为 Contro-m键,它可以写成Ct-m。其他的控制字符有:Ctl-d,表示程序输入到此结束;Ctl-g,终端上的振铃呜响;Ct-h,通常称为 Backspace(退格键),它可在纠正错误的输入时使用;还有Ctl-i,通常称作Tab,它使光标往前跳到下一个Tab的停止位,这点非常类似于普通的打宇机。在UNIX系统中Tab间隔为8个空字符。在多数终端上Backspace和Tab都有各自的键符有两个键具有特殊的含义:个是 Delete,有时又称作为 Rubout或某些缩写;另一个是Break,有时又称作为 Interrupt。在多数UNIx系统中,按 Delete键可立即中止程序,而不等待程序完成。在某些系统中,Ctl-c提供这项功能。而在有些系统中,根据终端的连接方式Break可能是 Delete或Ctl-c的同义词112与UNX会话让我们从与UNIX系统的会话开始。在本书的例子中,你健入的内容用斜体字符表示,计算机回应的用正体表示。建立连接:必要时拨号或打开电源系统应该显login: you键入名称后按叫车PasSword1令在键入时不会显示You have mail脊录斤可肴邮件系统等行用户命令铵几次同车s dateH期和H间Sun Sep2523:02:57PDy1983谁在使用机器DlIttysep2513:59tty2sep2523:01m品xy七七y4sep2519:03dougttysep2519:22egbttysep2517:17ttysep2520:48血魂工工读邮件From doug Sun Sep 25 20: 53 EDT 1983give me a cal1 sometime monday阿车以到下一条消息From mary Sun sep2519:07ED1983下·条消息Lunch at noon删除该汁息没有消息了加a1工mxy向mary发邮件1 unch at12主8fine邮件结束挂断也话或关终端全部结束
用户评论