Unix 编程工具

作者:Eric F. Johnson
出版社:M&T Books
价格:美国 $34.95
ISBN:1-55851-482-1
评论员:Andrew L. Johnson
虽然 Unix 编程工具 的封面和封底以及作者的引言似乎表明了深入的报道,但本书实际上是一本入门书。事实上,真正涵盖的内容与暗示的报道之间的差异是我主要的不满——但我稍后会谈到这一点。首先,让我们快速浏览一下读者可以期待的内容。
本书本身分为三个主要部分:“构建程序”(第 1-6 章)、“维护程序”(第 7-11 章)和“文档化您的工作”(第 12-13 章)。
第一章简要介绍了 Unix,包括一些基本的 shell 命令和实用程序。第二章快速介绍了编译和链接 C 和 C++ 程序以及创建库的过程。对于超出基础知识的任何内容,您需要查阅 man 页面。给出了创建和运行 Java 程序的示例,并简要讨论了 Perl 和 Tcl。
第三章概述了使用 make 自动化构建过程的基础知识。这里的信息足以让新手开始创建和使用他们自己的 Makefile。imake 和 xmkmf 命令得到了简要介绍,但不足以让新手开始舒适地使用它们。
在第四章“处理文本文件”中,您可以期望被展示如何在文本文件上调用 vi 或 Emacs,并且为您提供了每个编辑器的常用编辑命令表。提到了一些图形编辑器,并提供了一些这些编辑器的屏幕截图。本章最后简要提到了 sed、awk 和 Perl。
第五章主要介绍了 grep 和 find 命令,但同样,覆盖范围有限。使用 grep 的示例都侧重于查找文字文本。提到了正则表达式,并展示了一些字符类,但警告说这些表达式超出了大多数 grep 的用法。
第一部分的第六章也是最后一章介绍了安装。在这里,您将了解 tar、shar、split、uuencode、compress 和 gzip。install 程序也被提及作为在某些情况下替代使用 tar 的方法。
第二部分从第七章开始,介绍了调试器:dbx、gdb 和 xdb。您将了解如何启用调试进行编译,以及如何获取堆栈跟踪、设置断点和打印变量值。一些图形前端被提及并附带屏幕截图,C 语言调试器 lint 和一些内存检查实用程序也被提及。本章最后快速浏览了 Java 调试器 jdb。
第八章提供了关于 diff 和相关程序的基本信息,以及关于使用 patch 程序的说明。
第九章,关于版本控制,可能是本书中最好的一章。本章从使用 RCS 的最基本要素开始,然后列出 RCS 的重要命令和用途。尽管作者给人一种印象,即必须使用 RCS 子目录才能使用 RCS,但其覆盖范围足以让新手开始将版本控制应用于他们的项目。
第二部分的其余两章非常简要地讨论了跨平台开发以及使用 prof 和 gprof 检查程序性能。这些章节,像早期的章节一样,在覆盖范围的广度和深度上都没有提供足够的介绍。
本书的最后一部分是关于文档化的,第 12 章侧重于 man 页面,第 13 章侧重于 HTML 格式的文档。在第 12 章中,您将了解创建 man 页面的基本格式化命令,并获得一个可以用作模板的示例。
第 13 章似乎更侧重于源代码文档化,并展示了如何使用工具 cocoon 和 cxref 从 C++ 头文件或 C 源代码和头文件生成 HTML 格式的文档——只要在这些文件中使用专门的注释格式。本章还介绍了 Java 程序的类似工具 javadoc。
本章结尾讨论了 Perl 脚本的 POD 文档,但由于 POD 实际上是一种轻松生成 man 页面的方法,因此将此讨论放在前一章中会更有意义。值得注意的是,第 13 章关于文档化的讨论中完全没有提及任何关于文学编程技术和工具的内容。虽然文学编程不是主流,但我认为这是一个不幸的遗漏,遗漏了一套强大的工具和技术。
如上所述,本书封面和作者引言所声称的内容与本书实际涵盖的内容之间存在明显的差异。这方面最好的例子是封面上的声明:“涵盖 Perl、Tcl、Java、Emacs、make、sed、awk、grep、C、C++ 等。” 实际上,awk 在本书中只出现了两次——一次在第 110 页:“awk 是另一种文本文件工具,尽管它主要用于创建文件或关于文件中保存的数据的报告。”;另一次在索引中,引用第 110 页。sed 有整整三句话,也在第 110 页。Perl 的覆盖范围仅限于展示如何在脚本上调用 perl,或者如何使用 #! 符号创建可执行脚本。值得注意的是,没有任何提及 Perl 的内置交互式调试环境。
在封底,您被告知您将了解如何“充分利用您的文本编辑器”。然而,实际上,第四章仅提供了 vi 和 Emacs 的基本介绍。在随后的章节中,偶尔会有关于将这些编辑器(主要是 Emacs)与一些其他工具集成的段落,但不要期望仅凭本书中包含的信息就能充分利用这些编辑器中的任何一个。
在引言中,作者暗示本书对新手和“铁杆 UNIX 开发人员”都将有用,并且本书将涵盖所有“细枝末节”。然而,在第二章的总结中,他给了我们以下描述:“好吧,这就是在 Unix 上创建 C、C++、Java、Perl 和 Tcl 程序的旋风之旅。” “旋风之旅”是对本书对 Unix 编程工具的覆盖范围的恰当描述。
本书中讨论的大多数工具都可以在随附的 CD-ROM 中找到,但实际上,它们中的大多数都包含在大多数 Linux CD-ROM 发行版中,或者很容易从 Linux 存档中获得。在一些 Linux 入门书籍(参见“其他资源”)中也可以找到与本书中许多工具类似的入门级介绍,这些书籍还具有在更广泛的 Unix/Linux 环境中提供更多细节的额外好处。
对于那些想要更好地了解主要编程工具,以及探索 Unix/Linux 环境中的一些编程问题(例如终端编程、套接字、信号量、管道、数据管理等)的人,我建议 Beginning Linux Programming(参见“其他资源”),顾名思义,它适合 Unix 编程新手,但提供的信息比此处评论的书籍要多得多。
Andrew 正在攻读物理人类学博士学位。他目前与妻子和两个儿子住在马尼托巴省温尼伯,在那里他经营一家小型咨询公司,并在有空的时候享用一杯美味的黑啤酒。可以通过 ajohnson@gpu.srv.ualberta.ca 与他联系。