本书由来自Red Hat公司的资深程序师撰写。全书分为四个部分。第一部分介绍操作系统协议术语、文件和运行环境;第二部分介绍编译、链接、程序输入和调试工具;第三部分介绍系统内核和程序库界面;第四部分介绍综合应用。本书几乎涵盖了Linux编程的各个层面,内容由浅入深,可读性较高。\r\n 本书适合软件设计开发人员及大专院校师生阅读。\r\n 本书由来自Red Hat公司的资深程序师撰写,旨在指导读者在Linux平台上开发应用程序,或把其他平台上的程序移植到Linux平台上。\r\n*如果你是Unix程序员,你将能很容易地把程序移植到Linux平台上。\r\n*如果你是C程序员,本书的内容和实例将帮助你熟练地在Linux平台上工作。\r\n*如果你是Linux程序员,本书的高附阶内容和清晰的讲解将使你的编程工作更加得心应手。\r\n\r\n
序言\r\n\r\n第一部分 入门\r\n\r\n第1章 Linux的发展史\r\n\r\n1.1 Unix自由软件简史\r\n1.2 Linux的发展\r\n1.3 Unix系统的基本家谱\r\n1.4 Linux的家谱\r\n\r\n第2章 许可证与版权\r\n\r\n2.1 版权\r\n2.2 许可证\r\n2.3 自由软件许可证\r\n\r\n第3章 有关Linux的更多信息\r\n\r\n3.1 Linux文件概观\r\n3.2 其他手册\r\n3.3 源代码\r\n3.4 Linux(和其他)新闻组\r\n3.5 邮件列表\r\n3.6 其他文件\r\n3.7 你的发布销售商\r\n\r\n第二部分 开发环境和工具\r\n\r\n第4章 开发工具\r\n\r\n4.1 编辑器\r\n4.2 make\r\n4.3 GNU调试程序\r\n\r\n第5章 gcc选项和扩展\r\n\r\n5.1 gcc选项\r\n5.2 头文件\r\n\r\n第6章 存储器调试工具\r\n\r\n6.1 错误程序\r\n6.2 电子篱笆\r\n6.3 检验程序\r\n6.4 mpr和mcheck()\r\n\r\n第7章 程序库的创建和使用\r\n\r\n7.1 静态程序库\r\n7.2 共享程序库\r\n7.3 共享程序库的设计\r\n7.4 共享程序库的创建\r\n7.5 共享程序库的安装\r\n7.6 使用共享程序库\r\n\r\n第8章 Linux开发环境\r\n\r\n8.1 了解系统调用\r\n8.2 寻找头文件和程序库文件\r\n\r\n第三部分 系统编程\r\n\r\n第9章 进程模型\r\n\r\n9.1 定义进程\r\n9.2 进程属性\r\n9.3 进程信息\r\n9.4 进程基本元素\r\n9.5 简单子进程\r\n9.6 会话和进程组\r\n9.7 关于ladsh\r\n9.8 创建克隆\r\n\r\n第10章 简单的文件操作\r\n\r\n10.1 文件模式\r\n10.2 基本的文件操作\r\n10.3 查询和改变信息节点信息\r\n10.4 处理目录项\r\n10.5 文件描述符操作\r\n10.6 创建未命名管道\r\n10.7 对ladsh添加重定向信息\r\n\r\n第11章 目录操作\r\n\r\n11.1 当前工作目录\r\n11.2 更改根目录\r\n11.3 创建和删除目录\r\n11.4 读取目录内容\r\n11.5 文件名匹配\r\n11.6 增加目录及匹配\r\n\r\n第12章 高级文件处理\r\n\r\n12.1 输入输出多重操作\r\n12.2 内存映射\r\n12.3 文件封锁\r\n12.4 分散/集中读写\r\n\r\n第13章 信号处理\r\n\r\n13.1 信号的概念\r\n13.2 Linuw(和POSIX)信号系统的API\r\n13.3 有效信号\r\n13.4 编写信号处理程序\r\n13.5 重新打开记录文件\r\n\r\n第14章 作业控制\r\n\r\n14.1 作业控制基础\r\n14.2 ladsh中的作业控制\r\n\r\n第15章 终端和伪终端\r\n\r\n15.1 tty操作\r\n15.2 termios概述\r\n15.3 termios实例\r\n15.4 termios调试\r\n15.5 termios索引\r\n15.6 伪终端\r\n\r\n第16章 用Socket联网\r\n\r\n16.1 协议支持\r\n16.2 实用函数\r\n16.3 基本Socket操作\r\n16.4 UNIX域Socket\r\n16.5 用TCP/IP联网的机器\r\n16.6 Socket错误\r\n\r\n第17章 时间\r\n\r\n17.1 表示时间和日期\r\n17.2 使用计时器\r\n\r\n第18章 随机数\r\n\r\n18.1 伪随机数\r\n18.2 密码与随机数\r\n\r\n第19章 虚拟控制台编程\r\n\r\n19.1 入门\r\n19.2 发出蜂鸣声\r\n19.3 判断终端是否为虚拟控制台\r\n19.4 寻找当前虚拟控制台\r\n19.5 管理虚拟控制台的切换\r\n19.6 综合例子:open命令\r\n\r\n第20章 Linux控制台\r\n\r\n20.1 性能数据库\r\n20.2 图示符、字符和映射\r\n20.3 Linux控制台性能\r\n20.4 直接写屏\r\n\r\n第四部分 开发库\r\n\r\n第21章 字符串的匹配\r\n\r\n21.1 匹配任意字符串\r\n21.2 正则表达式\r\n\r\n第22章 使用S-Lang处理终端\r\n\r\n22.1 输入处理\r\n22.2 输出处理\r\n\r\n第23章 Berkely db程序库\r\n\r\n23.1 概述\r\n23.2 基本操作\r\n23.3 读取记录\r\n23.4 修改数据库\r\n23.5 例子\r\n\r\n第24章 解析命令行选项\r\n\r\n24.1 popt的基本用法\r\n24.2 错误处理\r\n24.3 选项别名\r\n24.4 解析参数字符串\r\n24.5 处理外部参数\r\n24.6 应用例子\r\n\r\n第25章 运行时的动态载入\r\n\r\n25.1 动态载入接口\r\n\r\n第26章 名称与用户数据库\r\n\r\n26.1 ID-名称的翻译\r\n26.2 修改系统数据库\r\n\r\n附录A 直接访问I/O端口\r\n\r\nA.1 可移植的I/O端口访问\r\nA.2 直接I/O端口访问\r\n\r\n附录B ladsh源代码\r\n附录C GNU通用公共许可证\r\n\r\nC.1 序言\r\nC.2 有关复制、发布和修改的条款和条件\r\nC.3 如何将这些条款用到你的新程序\r\n\r\n词汇表\r\n\r\n\r\n
这本书是为那些具有编程经验(或虽然没有经验, 但有兴趣进行学习)的程序员而编写的, 以指导他们开发Linux软件或者把软件从其他平台移植到Linux系统上. 这本书是我们自己在学习Linux环境下编程时就想拥有的, 而且现在我们就把这本书摆在桌上作为参考. 在我们着手编写头三章的时候, 我们已经用草稿作为工作时的参考材料了.
Linux设计得很像Unix. 这本书在Unix的编程基础和风格方面会向你展现一个清晰的框架背景. Linux与Unix并不是根本不同的——它们的相异之处只在于, 如果你是一位平时只依赖Unix编程参考书来编程的程序员, 而那本参考书又完全不提及Linux的话, 那么Linux会令你伤透脑筋. 因此, 这本书的确是一本以Linux观点来写的Unix编程指南.
Linux有它本身独特的扩展部分, 例如它的直接屏幕访问功能(参见第20章), 而且Linux也有一些应用得比其他系统多的功能部件, 例如 S-Lang程序库(参见第 22章). 这本书的内容涵盖了许多Linux独有的扩展部分和功能部件, 以便你能真正利用Linux的优点来编写程序.
·如果你是一个熟悉C语言的程序员, 但不懂Unix和Linux, 那么只要你逐页仔细地学习本书, 并按照书中的例子进行编程, 你将成为一个出色的Linux程序员. 借助一些其他的专用系统文档, 你会发现过渡到Unix的任意版本是很容易的.
·如果你是一个熟练的Unix程序员, 你将发现这本书会帮助你更容易地过渡到Linux. 我们已经尽了最大的努力, 使你能容易地在这本书中准确获取你所需要的知识. 我们也仔细并且清晰地论述一些复杂的主题, 这些主题有时候甚至连有经验的Unix程序员都感到头痛, 例如进程和会话群. 作业控制和tty处理.
·如果你已经是一个Linux程序员, 由于本书清晰地论述了一些令人困惑的问题, 因此它会使你的许多编程任务变得更轻松. 此时几乎每一章你都可以独立进行阅读, 因为你已经掌握了Linux最低限度的基础知识. 无论你如何有经验, 都会发现近在手边的这本书是你很需要的.
这本书与普通的Unix编程书籍不同, 因为它是在专门论述一个特殊的操作系统. 我们没有必要迷惑新学者, 说什么“BSD是这样的, SVR4是那样的, HPUX有它自己的方式这样做, 而SGI也有自己的方式. ”我们将具体论述每一种情形, 然后让你把它们全部整理出来. 凭我们自己的经验, 可以讲只要你掌握了在任意二种Unix系统上熟练编程, 那么在别的系统上编程都会变得容易起来.
这本书不想把Linux编程的所有细节都覆盖进去. 例如, 它没有论述X Windows系统编程的问题, 因为其实这些编程与在任何Unix或Linux平台上编程都是完全一样的. 另外, 这本书也没有解释由 ANSIC所指定的基本界面问题——别的书籍已经解释得非常详细. 我们简练地论述了从一个Dos. Windows或Macintosh等系统下的C语言程序员, 过渡为一个 Linux系统下的C语言程序员所必需的信息. 我们没有论述可以在Linux系统下使用的编程语言的功能, 而且也没有论及在任何支持系统下表现效果相同的图形编程库. 相反, 我们为你指明了专门论述上述领域的书籍.
本书分四部分来论述.
·第一部分向你介绍Linux——操作系统协议术语, 文件和运行环境.
·第二部分论述了开发环境中最重要的方面——编译. 链接. 程序输入和一些在别的平台上不常用的调试工具.
·第三部分是这本书的核心——它描述了连接内核和系统程序库的界面, 主要是连接内核的界面. 只有这部分的最后三章是Linux所特有的, 这部分的大部分内容都以透视Linux的角度去论述一般的Unix编程.
·第四部分对你所学的知识进行综合——包括描述了一些重要的能提供独立于内核的界面的程序库. 准确来讲, 这些程序库并不是Linux所特有的, 但有几个在Linux系统中较为常用.
如果你对Linux或Unix编程已经熟悉了, 你可以以任意的次序去学习本书的各章节, 不要强迫自己去看那些你不感兴趣的内容. 如果你对Linux或Unix不熟悉, 那么大部分的章节都将是独立的, 但你也很可能想首先参见第1. 2. 4 5. 8. 9. 10和11章, 因为这几章向你提供了大部分读其他章节所必需的基础知识. 特别是第 9. 10和 11章, 它们构成了Unix和Linux编程模块的核心.
下面的这几本书, 虽然在某些地方可能会有重复, 但对这本书作了更简单或更高级的补充, 或讲述了相关的主题.
·《The C Programming Language》[Kernighan,1988]简明的讲授了 ANSI标准 C语言编程, 但缺乏操作系统参考. 他推荐读者具有一些编程知识或“接近一个更有知识的同事”
·《Practical C Programming》[Oualline,1993]逐步传授 C语言编程和风格, 针对那些没有多少编程经验的人而采用了易学的方法.译注:本书中文版《实用C语言》已由中国电力出版社出版)
·《programming With GNU Software》 [Loukides,199]7介绍 GNU编程环境, 包括运行C编译器, 调试器, 制造工具和RCS源代码控制系统.
·《Advanced Programming in the Unix Environment》 [Stevens, 1992]包括了最总要的Unix和类Unix系统, 虽然它预先介绍了Linux. 它有Linux应用编程后两章相似的材料:系统调用和共享库. 它用了许多例子并解释各种Unix版本的区别.
·《UNIX Network Programming》[Stevens, 1990]完整的介绍了网络编程, 包括 Linux上不实用的网络遗留风格, 至少向我们写的这样. 读这本书时, 从Berkeley的socket界面(参见16章)到维护最大可移植性都很吸引. 如果你需要做一些轻微的改动, 将你的Linux网络程序移植到某些版本的Unix上去的话, 这本书是很有用的.
到http://www.awl.com/cseng/books/lad/biblio.html可进一步找到相关书目的列表.
这本书中所有的源代码都是写书时我们已经测试过的例子. 所有的源代码的电子版都可以在http://www.awl.com/cseng/books/lad/src/和ftp://ftp.awl.com/cseng/books/lad/src/下找到. 为了说清楚, 一些短的源代码段只检验系统工作错误而没有检验所有错误. 然而, 书中和在我们Web和Ftp站点的完整程序, 我们尽力做到检查所有可能的错误(我们不是完美的).
本书教你可以使用哪些功能并如何将它们组织在一起, 我们鼓励你也学一学怎样使用参考文档, 其中一大半包括在你的系统中.
我们欢迎您将建议发到:lad-comments@awl.com 我们将阅读您的建议, 虽然我们不能保证—一回应.
Linux是一种迅速发展的操作系统, 当你阅读这本书时, 一些情况(虽然我们不希望)肯定已经改变. 我们写这本书时参考Linux2.0. 30以及在Red Hat Linux 4.2上的C语言库5. 3. 12. 我们也已经在Red Hat Linux 5. 0上C语言库6(glibc 2. 0. 5)中测试过源代码.
在您的帮助下, 我们将在互联网址 http://People.redhat.com/johnson/Lad/errata.html维护一张勘误和变更表.
我们也感谢每一位技术评论员消耗他们的时间来仔细地思考. 他们的建议使这本书更加完善. 特别感谢 Linus Torvalds. Alan Cox和Ted Ts`o, 他们耐心地回答了我们的问题.
也特别感谢 Kim Johnson和 Brigid Nogureira. 没有他们的耐心这本书就不会写成.