Linux程序设计(第4版)
上QQ阅读APP看书,第一时间看更新

版权信息

书名:Linux程序设计(第4版)

作者:[英]Neil Matthew Richard Stones

译者:陈健,宋健建

出版社:人民邮电出版社

出版时间:2010-06

ISBN:9787115228215

本书由人民邮电出版社授权上海阅文信息技术有限公司进行制作与发行

前言

欢迎阅读本书第4版,这是一本针对在Linux系统和其他UNIX风格的操作系统上进行程序开发的易于使用的指南性读物。

在本书中,我们的目标是介绍对于Linux程序员来说非常重要的主题,这些主题的涵盖面非常广泛。书名中的“beginning”更多的是指书中的内容而不是读者的技能。我们对本书的内容组织进行了精心的安排,以帮助读者更多地了解Linux所提供的功能,而不管读者现有的经验有多少。Linux程序设计是一个很大的领域,我们的目标是对广泛领域中的大量主题都进行介绍,从而让读者在每个主题上都具备足够的入门知识。

读者对象

如果你是一位程序员,希望利用Linux(或UNIX)提供给软件开发者的工具来加快程序开发的进度,尽量减少编程时间并让你的程序充分利用Linux系统所提供的功能,那么本书将非常适合你。书中明确清晰的解释和分步骤的实验,将帮助你迅速提高编程能力和掌握所有的关键技术。

我们假设读者具备一些C或C++语言的编程经验,这些经验可能来自Windows系统或其他一些操作系统。但我们会尽量保持书中示例程序的简单,即便你不是一个C语言编程专家,也可以轻松地阅读本书。如果存在需要直接比较Linux程序设计和C/C++程序设计的情况,我们都会在书中指出。

如果你刚开始学习Linux,请注意,这不是一本介绍Linux安装和配置的图书。如果你想多学习一些Linux系统管理方面的知识,请阅读其他的参考书籍,如Christopher Negus的Linux Bible 2007 Edition Wiley, ISBN 978-0470082799)。

本书的目标是作为一本教程,向读者介绍大多数Linux系统上都有的各种工具和函数/函数库集,同时本书也可以作为一本方便使用的参考手册。本书的特点是简单易懂、内容广泛、示例丰富。

主要内容

本书希望让你达到以下几个学习目标。

❑ 掌握标准Linux C语言函数库和由各种Linux或UNIX标准指定的其他工具的使用方法。

❑ 掌握如何使用大多数标准Linux开发工具。

❑ 学会通过DBM和MySQL数据库系统存储Linux中的数据。

❑ 理解如何为X视窗系统建立图形用户界面。我们将同时使用GTK(GNOME环境的基础)和Qt (KDE环境的基础)函数库。

❑ 拥有开发自己的实际应用程序的信心和能力。

在讨论这些主题时,我们首先介绍编程理论,然后通过适当的例子和清晰的解释来阐明它。通过这种方式,你可以在第一遍的学习中就能够迅速掌握相关知识。如有必要,你还可以回顾这些内容以重温所有的基本要素。

书中小示例程序主要是为了演示一组函数的用法或某些新概念的实际使用情况。贯穿全书有一个大型的示例项目:一个简单的用于记录音乐CD详细资料的数据库应用程序。随着知识面的扩展,你可以按照自己的意愿开发、重新实现和扩展这个项目。虽然如此,这个CD应用程序对本书的任何一章来说都不是必需的,所以只要你愿意也可以忽略它,但我们认为它对书中讨论的技术提供了一些有用的和深入的示范,并且它还有助于讲解每个高级主题。我们对这个应用程序的第一次讨论出现在本书第2章的结尾处,它显示了一个非常大的shell脚本是如何组织的,shell如何处理用户输入、如何构造菜单以及如何存储和检索数据。

在简要介绍完编译程序、链接函数库和访问在线手册的基本概念后,将全面介绍shell编程。然后你将投入到C语言程序设计中,我们在这里讨论的内容包括文件操作、从Linux环境中获取信息、处理终端的输入输出和curses函数库(它使得交互式的输入和输出更易于管理)。最后你将用C语言重新实现CD应用程序。应用程序的设计方法没有变化,但新的代码中将用curses函数库提供一个基于屏幕的用户界面。

接下来我们讨论数据管理。为了学习dbm数据库函数库的使用方法,我们将再次重新实现这个应用程序,但这次实现所采用的设计方法将贯穿本书后续的一些章节。在其后的一章中,我们将介绍数据是如何使用MySQL存储在一个关系数据库中的,并且我们还将在该章的稍后部分重新使用这种数据存储技术,以便读者了解两种技术的区别。随着这些应用程序的规模越来越大,我们接下来需要介绍调试、源代码控制、软件发行和makefile文件等具体内容。

接下来,你将看到不同的Linux进程是如何使用各种技术进行通信的,以及Linux程序是如何使用套接字来支持不同机器之间的TCP/IP网络通信的,包括与使用不同处理器架构的机器之间通信的问题。

在掌握了Linux程序设计的基础之后,我们开始讨论图形化程序的创建方法。我们将通过两章的篇幅来介绍相关内容。首先介绍GTK+工具包,它是GNOME开发环境的基础;然后介绍Qt工具包,它是KDE开发环境的基础。

在本书的最后一章,我们简要介绍了Linux的标准,正是这些标准使得不同厂商的Linux发行版保持了足够的相似性,从而使我们编写的程序可以在不同的Linux发行版上运行。

正如你所期望的,本书还包括许多其他内容,但我们希望这里给出的简单介绍能够让你对将讨论的内容有一个清晰的概念。

准备工作

在本书中,我们将给予读者一种Linux程序设计的体验。为了更好地理解各章的内容,你应该在阅读本书时,实际运行书中的程序示例。这将提供一个很好的编程实践体验,并将启发你创建自己的程序。我们希望读者一边阅读一边在Linux系统上实际操作。

Linux可以用在许多不同的系统上。其适应性使得只要设备中有一个处理器芯片,Linux就可以以这样或那样的方式在其上运行。可以运行Linux系统的设备包括基于Alpha、ARM、IBM Cell、Itanium、PA-RISC、PowerPC、SPARC、SuperH、68k以及各种x86系列处理器(32位和64位)的计算机。

我们使用两台不同配置的Linux系统来编写本书并开发书中的程序示例,所以我们可以确信,只要你的机器可以运行Linux,你就可以很好的利用本书。此外,在本书的技术审核阶段,我们还在其他版本的Linux系统中测试了书中的全部代码。

我们在编写本书时主要使用的是基于x86的系统,但我们所讨论的内容很少是只适用于x86的。虽然在一台有8 MB内存的486机器上运行Linux也是可能的,但要想成功地运行一个现代Linux发行版并运行本书中的程序示例,我们建议你使用Fedora、openSUSE或Ubuntu等比较流行的Linux发行版的最新版本,并采用它们所推荐的硬件配置。

在软件需求方面,我们建议使用你偏爱的Linux发行版的最新版本,并应用当前更新(大多数厂商会通过自动更新的方式在线提供这些更新)以保证你的系统打上了所有的补丁。Linux和GNU工具集都是以GNU通用公共许可证(GPL)的形式发布的。一个典型的Linux发行版的大多数其他组件也都使用GPL许可证或其他开放源码许可证之一,这意味着它们都具有某些特性,其中之一就是自由。它们的源代码总是可以被自由获取,没有人可以剥夺这种自由。关于GPL的详细资料请见http://www.gnu.org/licenses/。关于开放源码定义和它所使用的各种许可证的详细资料请见http://www.open-source.org/。你总是可以获取到对GNU/Linux的支持——你可以自己研究源代码、雇用他人或购买厂商的付费支持。

源代码

当试验本书中的程序示例时,你可以手工输入所有的代码,也可以使用和本书配套的源代码文件。本书使用的所有程序源代码都可以从http://www.wrox.com上下载。在该网站中,你只需找到本书所在页面(通过搜索框或使用书名列表),然后在本书内容介绍页面点击Download Code(下载代码)链接,就可以获得本书的所有源代码了。


因为很多图书都有类似的书名,所以通过ISBN搜索图书是最佳的方式。本书的ISBN为978-0-470-14762-7。


在下载了源代码之后,你就可以用压缩工具对其解压。此外,你也可以访问Wrox代码下载主页(http://www.wrox.com/dynamic/books/download.aspx),获取本书和其他Wrox图书的源代码。

代码下载说明

我们尽力向读者提供能够清晰阐明书中所讨论概念的示例程序和代码片段。需要指出的是,为了尽可能地解释清楚书中介绍的新功能,我们将采用一种或两种代码风格。

特别要指出的是,我们并没有对调用的每个函数的返回值进行检查,以判断它是否与我们预期的一样。在真正的应用程序代码中,我们肯定要做这样的检查工作,而读者也应该对错误处理采取严格的措施。(本书的第3章将讨论一些捕获和处理错误的方法。)

GNU通用公共许可证

书中的所有源代码都遵循GNU通用公共许可证第二版(http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)的条款。下面的许可说明适用于本书所有的源代码:

排版约定

为了帮助读者更好地理解本书内容,随时把握学习重点,全书将使用以下一些排版约定:

书中像这样的文字框中记录的是一些重要的、不应该被忘记的、非常关键的信息。它们与周边的内容直接相关。

对当前讨论内容的技巧、提示、窍门和旁白都会像这样缩进放置并将字体设置为楷体。

当我们进行介绍时,我们将把一些重要的单词用楷体印刷,需要读者输入的字符用粗体印刷。组合键的格式为:Ctrl+A。

我们使用3种不同的方式来印刷代码和终端会话:

对于命令行,它的样式如上面代码的顶部所示,而它的输出结果则以常规风格印刷。字符$是提示符(如果命令需要超级用户来执行,则提示符会用字符#来替代),粗体字的文本是需要读者输入的命令,然后按下回车键执行该命令。其后采用相同字体但不是黑体的所有文本都是该黑体字命令的输出。在上面的例子中,你输入命令who,然后将在命令下面看到输出的结果。

Linux定义的函数和结构的原型使用黑体字来印刷,如下所示:

在我们的代码示例中,带有底纹的部分是新的、重要的内容,如下所示:

而如果代码采用的是如下所示不带底纹的风格,就表示它的内容没有那么重要:

当程序代码的内容在一章中有增加时,后来添加的代码首次出现时以加底纹的风格给出,其后就不再加底纹了。例如,一个新的程序如下所示:

如果我们在该章的稍后部分增加了这个程序的内容,新增代码将带有底纹:

我们要提到的最后一个约定是,我们在每个程序示例开始之前都会加上一个“实验”标题,其目的是为了将代码分隔开,突出显示其组成部分,同时可以显示应用程序的进度。当我们觉得有必要时,还会在代码之后加上“实验解析”部分,来解释代码中与前面理论有关的关键之处。我们发现这两个约定有助于把非常难于理解的代码清单分解为相对简单的部分。

勘误表

我们已经尽力保证本书的文字和程序代码没有任何错误。但是人无完人,错误总是难免的。如果你找到了本书中的错误,比如拼写错误或代码错误,我们将非常感谢可以得到你的反馈。指正错误不仅可以为其他读者节省时间,同时也可以帮助我们提高图书的品质。

要找到本书的勘误表,请访问http://www.wrox.com,然后使用搜索框或书名列表来找到本书。在本书的页面,点击Book Errata(图书勘误表)链接。在该链接指向的页面中,你可以看到由Wrox编辑发布的所有针对本书提交的勘误。你也可以通过网址http://www.wrox.com/misc-pages/booklist.shtml找到一个完整的图书列表,其中包括指向每本书勘误表的链接。

如果在本书的勘误表中没有找到你发现的错误,可以访问网址http://www.wrox.com/contact/techsupport.shtml,填写该页面上的表格以将你发现的错误发送给我们。我们将检查你发送过来的信息,如果它是正确的,我们将在本书的勘误表中发布该信息,并在本书的下一版中修正该问题。

p2p.wrox.com

为参与作者和同行的讨论,你可以加入P2P论坛,它的网址是p2p.wrox.com。这个论坛是一个基于Web的系统,你可以在其上发布与Wrox图书和相关技术有关的消息,并与其他读者和技术用户交流。这个论坛还提供了订阅功能,当有你感兴趣的主题发布时,论坛会通过电子邮件把这些消息发送给你。Wrox的作者、编辑、其他行业专家和与你一样的读者都会到这个论坛探讨一些问题。

http://p2p.wrox.com中,你将找到很多不同的论坛,这些论坛不仅有助于你阅读本书,而且也有助于你开发自己的应用程序。要加入这些论坛,你只需按如下步骤操作即可。

(1)访问p2p.wrox.com并点击Register链接。

(2)阅读使用条款并点击Agree按钮。

(3)填写加入论坛所必需的信息和你想要提供的其他可选信息,然后点击Submit按钮。

(4)你将收到一封电子邮件,该邮件告诉你如何验证你的账号并完成加入程序。


注意,不加入P2P论坛也可以阅读论坛中的消息,但是如果你想要发布自己的消息,你就必须加入论坛。


加入论坛后,你就可以发布新消息并回复其他用户发布的消息了。你可以在任何时间阅读Web站点上的消息。如果希望某个论坛能将最新的消息通过电子邮件发送给你,你可以点击论坛列表中该论坛名称旁边的Subscribe to this Forum图标。

要获得如何使用Wrox P2P的更多信息,你可以阅读P2P FAQ列表中的问题及其答复,这些问题与论坛软件的工作原理及很多与P2P和Wrox图书相关的常见问题有关。要阅读FAQ,你可以点击任何P2P页面上的FAQ链接。

致谢

感谢许多帮助本书出版的人。

Neil要感谢他的妻子Christine,谢谢她的理解,感谢他的孩子Alex和Adrian,没有抱怨他们的父亲只顾在书房中写作。

Rick要感谢他的妻子Ann以及孩子Jennifer和Andrew,他们非常理解和支持自己的父亲在晚上和周末要全神贯注地写书。

我们要感谢Wiley出版社的工作人员,正是他们的努力使得本书的第4版得以发行。感谢Carol Long启动了这个项目并整理了合同,感谢Sara Shlaer杰出的编辑工作和Timothy Boronczyk出色的技术审查。我们还要感谢Jenny Watsonfor找出了书中所有的冗余内容,并让本书顺利通过管理层的审核,感谢Bill Barton确保本书完美地组织和呈现,还要感谢文字编辑Kim Cofer。我们还非常感谢Eric Foster-Johnson对本书第16章和第17章所作的出色工作。可以说,如果没有大家的共同努力,本书不可能做到像现在这么好。

我们还要感谢我们的老板,Scientific Generics、Mobicom和Celesio在本书4个版本的出版过程中给予的支持。

最后,我们要向两位帮助促成本书出版的重要人士致以崇高的敬意。首先是Richard Stallman,他开发了优秀的GNU工具,提出了自由软件环境的思想(现在它已通过GNU/Linux成为现实)。第二位是Linus Torvalds,他开展并持续鼓舞着协同开发工作,向我们提供了一个不断改善的Linux内核。