[Unix编程环境]The.unix.programming.envirment中文版
[Unix编程环境]The.unix.programming.envirment中文版中文扫描版Brian W.Kernighan 克尼汉 的经典书译者序UNIX是当代计算机操作系统的一个成功典范。从计算机操作系统的发展史来肴,UNX超过了以往所有的操作系统,取得了前所未有的成功UNIX系统的诞生已经有30年了。许多操作系统在这期间早寿终正寝,然而没有一位计算机作者会预占UNK在可见的今后年代中走下坡路。UNX不仅在操作系统发展的历史上具有里程碑作用,而且,它在学术上和教学中也是人们首先研究和探讨的为数不多的操作系统之UNX极大地推动了操作系统理论旳发展,是所有计算机院校、系所必须开设和研讨的一门课程。UNIX不仅在学术上取得了成功,多年来,它在商业上的成功也是极为出色的。成百万台的机器在运行着它。而近年来,随着互联网的迅猛发展,它的装机量更是可观,而更重要的是,凡是重要的互联网的站点,几乎都把UNIX作为首选的Web服务器操作系统。从这些事实来看,UNIX的重要性是不言而喻的。与其他系统不同的··点是,UNX然成功和C话言的成功密不可分。UNX自身就是C高级程序设计语言的编程典范。UNⅠX推动了C语言的应用和普及。而C语言又反过米促进了UNX在更广阔领域里的成功如今,世界正处于世纪之交,随着 Linux操作系统在 Internet的出现,人们又·次看到UNIX操作系统的新的高峰出现在我们面前。 Linux是“ free uNiX”,即免费的UNIX。 Linux遵从国际上相关组织制定的UNX标准,即POSⅨX。它的结构、功能以及界面都与经典的UNIX并无二致。 Linux不但继承了UNIX的全部优点,而且还增加了一条其他操作系统不曾具备的优点,即inu操作系统源码全部开放。从某种意义上讲, Linux是UNIX在国际互联网环境下的一次新生。想要学习90年代的 Linux吗?请从UNIⅨX开始,请从这本书开始。应该说本书不是一本普通的有关UNX的书籍。木书的写作日期是1984年,十多年岁月的考验更显露其华彩。在书籍的海洋中,本书是有关UNX编程环境的一本举世公认的经典著作。迄今为止,在这个领域中,还没有其他的书能够替代它。这是一本深入浅出地讲解如何在UNIX环璄下进行程序设计的优秀书籍。书中引用大量编程实例,由浅入深地讲解如何使用UNIX及其各种上其,以及如何用C语言在UNX环境下写出高质量的程序来。止因为木书的重要价值,所以在国际上,许多一流大学的相关专业都采用本书作为首选教科书想要成为一名UNX系统上的程序设计高手吗?请仔细阅读本书,并上机实践。想要掌握C语言的精妙技巧吗?请在机器上试验本书中的实例并尝试做出改进。本书对初学者也同样适用。跟随本书的讲解,一边学,一边上机实践,初学者就一定会成为编程好于。本书适合作为大专院校相关专业的教科书。对于想深入掌握UNIX和C语言的程序设计人员,以及想学习和掌握 Linux的人员,本书也不失为一本难得的参考书叁加木书翻译工作的还有:张乃琳、李茹、汤敏、梦秋、叶松和翁念龙。由于吋间有限,书屮难免有误,请读者指出,以便再版时收正1999年2月于北京序言UNIX安装的数量已经增至10台,超过了预期。”《UNIX程序员手册》,第2版,1972年6月UNIX°操作系统丁1969年首次在贝尔实验室合闲置的 DEC PDP7计算机上启用。当时,Ken Thompson从 Rudd Canaday, Doug Mcllroy, Joe Ossanna和 Dennis ritchie处得到启示,并在他们的攴持下,编写了小型通用分时系统,其适用性好、可信度高,吸引了热心的用户,并最终装备在…台较大的计算机PDP11/20上。系统早期的用户之一是 Ritchie,他在1970年曾帮助将该系统转到PDP-1l计算机上。 Ritchie也曾设计和编写了C程序语言的编译程序1973年, Ritchie和 Thompson用C语言重写了UNIX核心,打破了系统软件用汇编语言编写的传统。经过此次重写,该系统最终成为今天必不可少的操作系统。大约在1974年,UNIX获准进入大学“用于教育目的”,而且,几年之后便进入了商业领域。在此期间,UNX系统在贝尔实验室日益发展状大,成功地进入到实验室、软件开发项目、字处理中心和电话公司运行攴持系统。从那时起,UNⅠX开始向全球扩散,从微型计算机到大型机,已安装了数以万计的UNX系统。是什么优使UNX系统如此成功呢?首先,由于是用C语言编写,因此它是可移植的UNIX系统的运行范围可以从微型机到大型机,这是一个强大的商业优势。第二,源代码是用高级语言编写的,且很容易得到,从而使系统容易适应特殊的需求。最后,也是最重要的点,它是一个良好的操作系统,特别是对程序员而言。UNX編程环境非常丰富而且容易取得成效。尽爷UNX系统引入了很多创新的程序和技术,但并非其巾某个单独的程序或想法使得工作完美无缺。相反,是程序设计的方法,即应用计算机的基本原则使系统富有成效。虽然这个基本原则不能用一句话概括,但其核心就是,系统的能力更多地来自程序之间的关系,而不是程序本身。许多单独的UNX程序只能完成相当简单的工作,然而,在与其他程序结合起来使用时,它们就成为通用而有效的工具本书的的是传授UNIX程序设计的基本原则,由于这个基木原则是以程序间的关系为基础的,因此,除了程序组合和运用程序进行创建程序的主题外,我们还用了大量篇幅对单个工具进行讨论。要想很好地使用UNx系统及其组成部件,不仅必须了解如何使用程序,还要了解它们是怎样与环境相匹配的。尽管UNX系统得到了广泛应用,但精通的用户却越来越难找到。我们经常发现富有经验的用户(包括我们自己在内)只能找到问题的笨解法,或者只会写程序做现有的工具易于处理的工作。当然,没有定的经验和对其透彻的理解,更不易获得精巧的解法。我们希望无论是新手还是老用户,通过阅读本书,都能够增强理解力,从而使系统的使用更加有效和有趣。)UNIX是贝尔实验室的标。“UNIX”不是首字母缩栟词,它是一个同 MULTICS稍微有联系的双关语,在UNX之前、 Thompson和 Ritchie使用 MULTICS操作系统希望读者更好地使用UNIX。我们把焦点对准程序员,希望通过本的学习,能使其工作更有效,从而也使程序组的工作更有成果。尽管我们的主要对象是程序员,但学习本书的前4章或前5章并不需要具有编程经验,因此,对于其他读者来说,本书也是很有帮助的。我们尽可能尝试使用真实的而不是假设的例子,来表述我们的观点。有些程序尽管在书中作为实例,但也可成为常用程序的一部分。所有实例都经过了机器可读格式文本的直接测试本书的编排如下。第1章为系统使用的基础入门。其中包括登录、邮件、文件系统、常用命令和命令解释的基本原理。有经验的用户可以略过此章。第2章讨论UNIX文仲系统。文件系统是系统操作和使用的核心,因此必须充分理解才能更好地使用。这一章讲述文件和目录、容许权限和文件模式以及I节点。章未是文件系统层次的浏览和设备文件的解释。命令解释程序,即shel,是一个基本具,不仅用于执行程序,也用于编写程序。第3章讲述怎样按要求使用shel:创建新命令、命令变量、she变量、基本控制流和输入输岀重定向第4章介绍过滤程序,它是当数据流通过时,对数据执行简单转换的程序。首先涉及grep模式搜索命令和其对应程序;接下来讨论诸如sort的一些更多的常用过滤程序;其余部分重点讨论两个通用数据转换程序,称为sed和aαwk。sed是流编辑程序,是当数据流通过时,作出编辑更改的一个稆序。awk是用简单信息硷索和报告生成仟务的一种编程语言。使用这些程序,有时再加以与shel.配合,常常能完全避免流于常规的程序设计第5章讨论如何使用shel程,以供他人使用。主要内容包括更高级的控制流和变量、陷阱和中断处理。本章的实例充分利用了sed、awk和shel至此读者将完全领会运用shel其他现有程序所能进行的工作。第6章讲述有关运用标准I/O库编写新程序的内容。这些程序用C语言编写,我们假设读者了解或至少最近学过C语言我们会展示用于设计和组织新程序的实用策略,介绍怎样用易于管理的步骤创建程序和如何利用现有的工具。第7章涉及系统调用,这是其他所有软件层的基础,主要內容包括输入输出、文件创建出错处理、目录、I节点、进程和信号第8章讨论程序开发工具。yacc是-种话法分析程序生成器;make可以控制编译大程序的过程;lex可以生成词法分析程序。上述讨论是以一个大程序的开发为基础的,该大程序是种类似C语言的可编程计算器第9章讨论文档处理工具,本章叮以独立丁其他章节阅读附录A概括了标准编辑器ed。尽管许多读者日常工作中喜欢运用其他编辑器,但ed是非常通用、有益而且高效的。它的正则表达式是其他程序(如grep和sed)的核心,而且只为此理由就值得一读附录B是用于第8章计算器语言的参考手册。附录C计算器程序最后版本,列出了所有的源代码以便于阅读。另外,还有一些实用的内容。首先,UNIX系统的使用已经很普遍,有多种广泛应用的版本。例如,第7版出自UNIX系统的发源地——一贝尔实验室计算机科学硏究中心。系统I和系统Ⅴ是贝尔实验宝支持的正式版本。加利福尼亚大学 Berkeley分校提供的系统源自第7版,通ⅥI常称为UCB4xBSD。另外,特别是对于小型计算机,有大量变种UNIX系统,它们也是从第7版派生的。我们尽可能地把不同版本中完全一致的内容放在一起,来对付这些版差异。尽管我们将要讲授的课程是独立于任何特定版本的,但对于特定的细节,我们选择了和第7版中有关内容一致的描述,因为它构成了广泛应用的绝大多数UNIX系统的基础。我们也已经在贝尔实验室的系统上和 Berkeley41BSD中运用了这些例子;只需做一些轻微的改动,而具改动只限于少数例子。不管机器运用何种版木,读者会发现其间的差异是很小的。其次,虽然本书中有很多参考资料,但它不是本参考手册。我们知道讲授使用、方法和风格要比仅仅讲授细节重要得多。《UNIX程序员手册》是信息的标准来源,书中的许多参见内容是指参见这个手册。读者需要使用手册去解决那些没有包含在本书中的问题,或者检测读者的系统与本书作者的系统之间的不同之处。最后,我们相信,实践出真知。本书应在终端旁阅读,这样便于对所讲的内容进行实验检査或者指正,探索其局限和变化。请边阅读、边实践,再回顾小结,然后进一步地阅读。我们相信,尽管UNⅠX系统不是完美无缺的,但它是一个相当优秀的计算机环境,我们希望通过对本书的阅读,读者也得出这一结论Brian KernighanRob Pike目录译者序14.5剪裁环境26序言15UNX系统的其余部分28第1章初学UNIX第2章文件系统301.1起步聊章■2.1文件系统的基础1.1.1有关终端和击键的些2.2文件结构33预备知识23目录和文件名1.12与UNX会话24权限373登录25节点1.1.4键入命令26月录层次451.1.5异常的终端行为27设备1.J.6键入错误第3章shei使用1.1.7继续鍵入3.1命令行结构1.1.8中止程序3.2符531.19注销3.3创建新命令1.1.10邮件634命令参数1.1.11用户间通信……3.5程序输出作为参数1.1.12新闻…36she变量631.1.13手册3.7进一步讨论ⅣO重定向6611.14计算机辅助教学3.8shel序里的循环…1.1.15游戏3.9 bundle合并6912文件和常用命令3.10为什么说she是可编程的72.1创建文件第4章过滤程序1.2.2列出文件94.!1grep系列12.3打印文件42其他过滤程序751.24移动、复制和删除文件43流编程序sed77125文件名44模式扫描与处理语言awk.2.6有用的命令44.1宁段822.7文件系统命令小结44.2打印8313目录…164.4.3模式14 shell19444 BEGIN与END模式4.1文件名简写……194.4.5算术运算与变量84142I/O重定向……………………214.4.6控制流………………14.3管道234.7数组874.4进程2444.8关联数组88449符串8975信号和中断644.4.10与shel.交互作用第8章程序开发■L■■l6944.11基于awk的日历服务…■p■gl8.]第一阶段:四功能计算器4.4.|2附注81.1语法1745好的文件与过滤程序…8.12yac概述J70第5章shel编程t斷■单命●4即看“4t8.1.3第一阶段的程序7151定制cl命令96814在程序中增加单目减…1745.2 which命令8.1.5关于make7553 while和 until循环10482第二阶段:变量和错误恢复…………17554ap:捕获中断·10983第三阶段:任意变量名和内部函数…17855 overwrite:改写文件n083.1两谈make…18456zap:使用名宇终止进程……Il483.2关于lex855.7pick命令:空格和参数…………1684第四阶段:編译成机器1858news命令:社团服务信息l188.5第五阶段:控制流和关系运算符……19359get和put:追踪文件变动…1208.6第六阶段:凼数、过程和/O…………197510小结……·l1248.7性能评价…205第6章使用标准IO编程2688小结…………20661vis:标准ⅣO126第9章文档处理?62vis第2版:程序参数12891宏程序包ms.44·;;2096.3ⅵis第3版:访问文件39.1.1阵列文本………264p:-次显示一屏1339.12改变字体2126.5 pick…………l379.13其他命令2l26,6错误与调试1379.1.4宏程序包mm24Z在399.2 troff.246.8idi;:交卓式文件比较程序…I4I92.上字符21469尖取环境变量……14592.2改变宁体和尺寸………215第7章UNX系统调用47923基本ot令167.1低级IO47924定义宏2177.1.1文件描述符……l4793tb和eq预处理程序I77.1.2文件I7489.3.1表格287.13创建文件7499.3.2数学表达式2197.1,4错误处理151933输出2207.1.5随机访问1594排印手册2222文件系统:日录9.5其他文档处理工具22573文件系统:I节点……【56第10章结束语22874进程l60附录A编辑器概述23074.1创建低级进程160附录Bhoc手册2397.42控制进程16附录Choc清单…243第1章初学UNX什么是UNⅠX?狹义地看,它是一个分时操作系统內核,即一个控制计算机的资源并分配给用户的程序。它让用户运行其程序;它控制与机器连接的外围设备(硬盘、终端、打印杋等等);它提供·个文件系统用以管理诸如程序、数据及文档一类信息的长期存储广义地看,UNIX通常不仅包含内核,还包括-些基本程序,诸如编译器、编辑器、命令语言、用于复制和打印文件的程序等。从更广的角度来看,UNIX可以包括由用户开发的、用于运行用户定制系统的程序,如文档处理上具、统计分析程序以及图像软件包这些有关UNIX的解释究竞正确与否,取决丁读者所面对系统的应用级别。本书其他部分提到UNX时,会在上下文指示其内在含义。UNIX系统有时看起来比实际上更复杂—对于新用户而言,很难以最佳方式使用可用资源。所幸它并不难入门—只要了解很少的几个程序,就可以开始工作了。本章帮助读者尽快地学会使用UNIX系统,是概述,而不是于册;后续的章节将详细介绍各种内容。木章涉及以下主要内容基本操作—登录和退出、简单的命令、纠正输入错误、邮件及终端间通信·日常使用-文件及文件系统、文件打印、且录以及常用命令。·命令解释器或 shell-——文件名缩写、输入输出重定向、管道、删字符及消行符设置、命令查询路径定义。如果你用过UNX,那么对本章的多数内容应该是熟悉的,可以直接跳至第2章即使阅读本章,也需要份《nx程序员手册》。对作者而言,告诉你翻阅手册中的某些内容,比在书中重复这些内容更为方便。本书不是为了替代手册,而是为了教会你更好地使用于册中的命令。另外,本书中所叙述的内容可能同你所使用的系统有所差别。在手册中的开始处有索引,可以协助找出解决某一问题的程序;应学会如何使用它。最后,有一句忠:不要害怕做试验。如果你是初学者,那么放心,不会出现伤害白身或其他用户的事。要通过试验了解事物原理。本章篇幅较长,最好的方法是一次读几页,并在学丬过程中不断试验。1.1起步1.1.1有关终端和击键的一些预备知识为了避免繁冗解释有关计算机使用的所有事项,作者假定你已经熟悉计算机终端,并知道使用方法。如果对下面的叙述迷惑不解,请询问身旁的专家们。UNⅨX系统是全双工的:你在键盘上敲入的字符送至系统,然后系统回送给终端并在屏幕上显示出来。通常εcho进程把宇字符直接复制到屏幕上,这样就可以看到所输入的是什么。但是有的时候,比如在键入保密口令时,echo关闭,字符就不会在屏幕上显示出来多数键盘字符是普通字符,没有什么特殊的含义。但有些字符是通知计算机怎样解释所2UMX编程环境键入的内谷的。到目前为止,这些键屮最重要的是 Return键。 Return键说明一行输入的结束系统作岀反应并把屏幕上的光标移到下一行的起始处。必须按下 Return键后,系统才会对键入的字符作出解释。Return键是一种控制字符——即不可见的字符,它控制着终端上输入输出的某种状况。在任一台终端上, Return都有自己的按键,但是其他大多数控制字符并非如此。相反,它们必须通过按住 Contrω键(Conτrol键有时被称作为C址键、Cnt键或Ct键),同时按下另个键,通常是一个字母来输人。例如, Return可以通过按下 Return键输入,或者,按住 Control键并键入m键。所以 Return键又可称为 Control-m键,它可以写成Ctl-m。其他的控制字符有:Ctl-d,表示程序输入到此结束;Ctlg,终端上的振铃鸣晌;Ct-h,通常称为 Backspace(退格键,它叮在纠正错误的输入时使用;还有Ctl-,通常称作Tab,它使光标往前跳到下一个Tab的停止位,这·点非常类似于普通的打字机。在UNIX系统中Tab间隔为8个空字符。在多数终端上Backspace和Iab都有各自的键符。有两个键具有特殊的含义:一个是 Delete,有时又称作为 Rubou成某些缩写;另一个是Break,有时又称作为 Interrupt。在多数UNIX系统中,桉 Delete键可立即中止程序,而不等待程序完成。在某些系统中,Ctl-c提供这项功能。而在有些系统中,根据终端的连接方式Break可能是 Delete或Ct-c的同义词1.12与UNⅨX会话让我们从与UNIX系统的会话开始。在本书的例子中,你键入的内容用斜体字符表示,计算机回应的用正体表示建立连接:必要时拨号或打开电源系统应该显示login: you键入名称后按叫车Password:4今在键入时不会显示You have mail登录后可看邮件系统等待用户命令按几次问车s dateH期和时间Sun sep2523:02:57EDT1983h谁在使用机器tty Sep 25 13: 5tty2 Sep 25 23: 01t七y4sep2519:03dougttysep2519:22gbttysep2517:17esep2520:48s mail读邮件From doug Sun Sep 25 20: 53 EDT 1983give e a call sometime monday呵车以f下·条消息From mary Sun Sep 25 19: 07 EDT 1983卜一条消总Lunch at noon tomorrow?删除该消息没有消息s mail mary向 Inary发邮件1 unch a12主Eine邮件结束挂断电话或关终端全部结束
用户评论