随着Linux平台的广泛使用,与之相关专业的应用开发变得越来越重要。本书以一个DVD出租商店为例,贯穿全文讲解了Linux的数据存储、GUI实现、PHP模型、使用Python、使用RPC和CORBA、文件编制、国际化及无盘的Linux和Beowulf群等技术,是Linux编程不可多得的参考书。本书适合Linux程序员及操作系统开发者使用。
\r\n
作者简介\r\n前言\r\n\r\n第1章 应用程序设计 \r\n\r\n1.1 概述 \r\n1.2 需求捕获 \r\n1.3 开发模型 \r\n1.3.1 “快速跟踪”开发 \r\n1.3.2 早测试、经常测试 \r\n1.4 DVD存储店 \r\n1.4.1 初始化需求 \r\n1.4.2 分析用户需求\r\n1.5 需求声明 \r\n1.6 应用程序结构 \r\n1.6.1 详细的设计 \r\n1.6.2 数据访问函数\r\n1.6.3 成员函数 \r\n1.6.4 片名函数 \r\n1.6.5 盘函数 \r\n1.6.6 租赁函数\r\n1.6.7 基准执行过程 \r\n1.7 参考资料 \r\n1.8 小结\r\n\r\n第2章 CVS \r\n\r\n2.1 Linux工具 \r\n2.2 术语 \r\n2.3 资料库\r\n2.4 单用户CVS项目 \r\n2.4.1 CVS命令格式 \r\n2.4.2 环境变量 \r\n2.4.3 引入一个新项目 \r\n2.4.4 开始项目工作 \r\n2.4.5 检查资料库中的修改 \r\n2.4.6 将修改更新到资料库中\r\n2.4.7 释放项目 \r\n2.4.8 检查修改 \r\n2.4.9 从项目中添加和删除文件 \r\n2.4.10 关键词替代 \r\n2.5 修订、标签和分支 \r\n2.5.1 修订版本 \r\n2.5.2 标签 \r\n2.5.3 分支 \r\n2.6 多用户CVS \r\n2.6.1 协同工作\r\n2.6.2 使用Watch命令 \r\n2.7 使用CVS的更多功能\r\n2.7.1 二进制文件 \r\n2.7.2 修正错误的注解 \r\n2.8 通过网络访问CVS \r\n2.9 GUI CVS客户端 \r\n2.10 参考资料 \r\n2.11 小结 \r\n\r\n第3章 数据库 \r\n\r\n3.1 选择数据库 \r\n3.1.1 mSQL \r\n3.1.2 MySQL\r\n3.1.3 PostgreSQL \r\n3.1.4 寻找适合自己的数据库 \r\n3.2 PostgreSQL \r\n3.3 数据库基础 \r\n3.3.1 第一范式 \r\n3.3.2 第二范式 \r\n3.3.3 第三范式 \r\n3.3.4 降低规范化\r\n3.3.5 一个简单的数据库 \r\n3.4 使用psql \r\n3.4.1 psql的命令 \r\n3.4.2 数据定义命令\r\n3.4.3 数据操作命令\r\n3.4.4 事务处理 \r\n3.5 数据库设计技巧 \r\n3.6 参考资料 \r\n3.7 小结 \r\n\r\n第4章 与PostgreSQL接口 \r\n\r\n4.1 从代码中访问PostgreSQL \r\n4.1.1 Libpq \r\n4.1.2 ECPG \r\n4.1.3 选择方法 \r\n4.2 应用 \r\n4.3 小结 \r\n\r\n第5章 MySQL \r\n\r\n5.1 安装和试用 \r\n5.1.1 预编译软件包 \r\n5.1.2 用源代码安装 \r\n5.1.3 安装后的配置 \r\n5.2 MySQL 管理 \r\n5.2.1 命令 \r\n5.2.2 创建用户并提供权限 \r\n5.2.3 口令 \r\n5.2.4 创建数据库 \r\n5.3 在PostgreSQL和MySQL中的SQL支持 \r\n5.4 用C语言访问MySQL数据 \r\n5.4.1 连接例行程序 \r\n5.4.2 处理错误 \r\n5.4.3 执行SQL语句 \r\n5.4.4 其他的函数 \r\n5.5 参考资料 \r\n5.6 小结 \r\n\r\n第6章 处理故障 \r\n\r\n6.1 错误类别 \r\n6.2 报告错误 \r\n6.3 检测软件错误 \r\n6.4 软件错误的类型\r\n6.5 调试语句 \r\n6.6 调试位置 \r\n6.7 准备调试 \r\n6.7.1 使用调试程序 \r\n6.7.2 GDB命令示例 \r\n6.7.3 其他GDB功能 \r\n6.8 参考资料 \r\n6.9 小结 \r\n\r\n第7章 LDAP目录服务 \r\n\r\n7.1 目录服务的概念 \r\n7.2 目录服务器结构 \r\n7.2.1 局部的命名 \r\n7.2.2 dn命名 \r\n7.2.3 对象组件\r\n7.2.4 LDAP目录树 \r\n7.2.5 LDIF文件 \r\n7.3 安装并配置LDAP服务器 \r\n7.3.1 安装OpenLDAP的步骤 \r\n7.3.2 配置OpenLDAP \r\n7.4 运行服务器 \r\n7.5 用C访问LDAP\r\n7. 5.1 初始化LDAP库 \r\n7.5.2 绑定LDAP服务器\r\n7.5.3 LDAP错误处理 \r\n7.5.4 第一个LDAP客户端程序 \r\n7.5.5 查询 \r\n7.6 修改数据\r\n7.6.1 添加新条目 \r\n7.6.2 修改条目 \r\n7.6.3 删除条目 \r\n7.7 应用程序 \r\n7.8 参考资料 \r\n7.9 小结 \r\n\r\n第8章 利用GNOME/GTK+进行GUI编程 \r\n\r\n8.1 GTK+/GNOME库 \r\n8.2 glib \r\n8.2.1 类型\r\n8.2.2 宏 \r\n8.2.3 串函数 \r\n8.2.4 内存分配\r\n8.2.5 列表 \r\n8.3 GTK+ \r\n8.3.1 窗口小部件 \r\n8.3.2 gtk_init和gtk_main \r\n8.3.3 GTK+应用程序示例 \r\n8.4 GNOME基础 \r\n8.4.1 菜单和工具栏 \r\n8.4.2 对话框 \r\n8.4.3 GNOME应用程序示例 \r\n8.5 GNOME源树 \r\n8.5.1 配置保存\r\n8.5.2 对话管理\r\n8.5.3 利用popt分析命令行 \r\n8.6 GNOME/GTK+参考资料 \r\n8.7 小结 \r\n\r\n第9章 使用Glade和GTK+/GNOME构建GUI \r\n\r\n9.1 Glade概述 \r\n9.2 Glade指南 \r\n9.2.1 主窗口 \r\n9.2.2 选项板 \r\n9.2.3 属性窗口\r\n9.2.4 Glade构建的源树 \r\n9.2.5 lookup_widget \r\n9.2.6 添加代码 \r\n9.2.7 libglade \r\n9.3 DVD Store GNOME GUI \r\n9.3.1 设计 \r\n9.3.2 编译和运行dvdstore \r\n9.3.3 结构 \r\n9.3.4 代码 \r\n9.4 小结 \r\n\r\n第10章 Flex和Bison \r\n\r\n10.1 输入结构 \r\n10.1.1 扫描器和句法分析器 \r\n10.1.2 生成器的工作原理 \r\n10.2 扫描器 \r\n10.2.1 一个简单的扫描器 \r\n10.2.2 扫描器说明 \r\n10.2.3 最长匹配原则\r\n10.2.4 规则表达式 \r\n10.2.5 操作 \r\n10.2.6 改变扫描器的输入输出 \r\n10.2.7 返回标识 \r\n10.2.8 上下文相关扫描器 \r\n10.2.9 flex的选项 \r\n10.3 句法分析器 \r\n10.3.1 生成句法分析器 \r\n10.3.2 创建语法测试程序\r\n10.3.3 标识类型 \r\n10.3.4 规则操作 \r\n10.3.5 bison选项\r\n10.3.6 语法中的冲突 \r\n10.3.7 数学表达式 \r\n10.4 参考资料 \r\n10.5 小结 \r\n\r\n第11章 测试工具 \r\n\r\n11.1 测试需求类型 \r\n11.1.1 应用程序结构\r\n11.1.2 步骤 \r\n11.1.3 普通测试 \r\n11.1.4 回归测试 \r\n11.1.5 一个测试程序 \r\n11.1.6 测试dvdstore程序 \r\n11.1.7 脚本测试 \r\n11.1.8 expect \r\n11.1.9 内存问题\r\n11.1.10 安装mpatrol \r\n11.1.11 使用mpatrol \r\n11.1.12 测试覆盖 \r\n11.1.13 性能测试 \r\n11.2 小结 \r\n\r\n第12章 安全程序设计 \r\n\r\n12.1 安全程序设计的概念 \r\n12.2 为什么安全程序设计是困难的 \r\n12.2.1 文件系统安全 \r\n12.2.2 验证用户 \r\n12.2.3 安全地使用密码术 \r\n12.2.4 安全网络编程 \r\n12.2.5 书写协议 \r\n12.2.6 标准网络密码工具 \r\n12.2.7 环境问题 \r\n12.2.8 Python \r\n12.2.9 PHP \r\n12.3 参考资料 \r\n12.4 小结 \r\n\r\n第13章 使用KDE/Qt进行GUI编程 \r\n\r\n13.1 简介 \r\n13.1.1 关于Qt \r\n13.1.2 关于KDE\r\n13.1.3 安装Qt \r\n13.1.4 安装KDE\r\n13.1.5 库 \r\n13.2 使用Qt编写应用程序 \r\n13.2.1 开始“Hello World” \r\n13.2.2 使用tmake来简化Makefile文件的管理 \r\n13.2.3 信号和插槽 \r\n13.2.4 再访“Hello World” \r\n13.2.5 从基类中派生 \r\n13.2.6 窗口小部件 \r\n13.2.7 布局 \r\n13.3 使用KDE编写应用程序 \r\n13.4 参考资料 \r\n13.5 小结 \r\n\r\n第14章 用KDE/Qt写DVD商店图形用户界面 \r\n\r\n14.1 应用程序设计 \r\n14.1.1 应用程序设计\r\n14.1.2 主窗口 \r\n14.1.3 会员对话框 \r\n14.1.4 租赁对话框 \r\n14.1.5 租赁报告对话框 \r\n14.1.6 搜索窗口 \r\n14.1.7 设置管理器\r\n14.2 代码的KDE转换\r\n14.3 KConfig和SettingManager函数 \r\n14.4 参考资料 \r\n14.5 小结 \r\n\r\n第15章 Python \r\n\r\n15.1 简介 \r\n15.1.1 特征\r\n15.1.2 Python:工作的好帮手 \r\n15.1.3 并非适合于任何工作 \r\n15.2 安装Python \r\n15.3 运行Python \r\n15.3.1 交互式解释器 \r\n15.3.2 命令参数 \r\n15.3.3 脚本参数 \r\n15.3.4 可执行的“Standalone” \r\n15.4 详解 \r\n15.4.1 解释器和字节编译 \r\n15.4.2 注解语法 \r\n15.4.3 区分大小写\r\n15.4.4 内建数据类型和运算符 \r\n15.4.5 变量 \r\n15.4.6 块结构的语法 \r\n15.4.7 语句的语法 \r\n15.4.8 函数 \r\n15.4.9 内部函数 \r\n15.4.10 名称空间\r\n15.4.11 模块和包\r\n15.4.12 标准产品中的一些模块 \r\n15.4.13 类和对象 \r\n15.4.14 扩展的Python \r\n15.5 一个例程:精打细算 \r\n15.6 在线参考资料 \r\n15.7 小结 \r\n\r\n第16章 使用PHP创建Web界面 \r\n\r\n16.1 PHP和服务器端的脚本 \r\n16.1.1 服务器端的脚本 \r\n16.1.2 PHP的功能 \r\n16.2 安装和配置PHP \r\n16.3 PHP语法简介 \r\n16.3.1 变量、常数和数据类型 \r\n16.3.2 PHP的运算符 \r\n16.3.3 语句 \r\n16.3.4 函数 \r\n16.3.5 数组 \r\n16.4 在DVD程序中使用PHP \r\n16.5 应用程序 \r\n16.5.1 登录 \r\n16.5.2 预订状态 \r\n16.5.3 查找片名 \r\n16.5.4 预订片名 \r\n16.5.5 删除 \r\n16.5.6 dvdstorefunctions.php \r\n16.5.7 dvdstorecommon.php \r\n16.5.8 dvdstorelogin.php \r\n16.5.9 dvdstoresearch.php\r\n16.5.10 dvdstorestatus.php \r\n16.5.11 dvdstorecancel.php \r\n16.5.12 dvdstorereserve.php\r\n16.6 参考资料 \r\n16.7 小结 \r\n\r\n第17章 使用C/C++嵌入和扩展Python \r\n\r\n17.1 在C/C++中开发扩展模块 \r\n17.1.1 所需软件工具 \r\n17.1.2 使用SWIG扩展Python \r\n17.2 使用C API扩展Python \r\n17.2.1 Python对象类型 \r\n17.2.2 引用记数和所有权\r\n17.2.3 开发C扩展模块的概念 \r\n17.2.4 简单函数 \r\n17.2.5 一个略微复杂的函数 \r\n17.2.6 全局解释器锁定 \r\n17.2.7 创建新的Python对象类型 \r\n17.2.8 使用C API封装C++对象 \r\n17.3 在C/C++中嵌入Python \r\n17.3.1 嵌入开发环境 \r\n17.3.2 使用高级函数嵌入Python \r\n17.3.3 将主程序静态链接到扩展模块上 \r\n17.3.4 使用低级调用嵌入Python \r\n17.4 一般性建议 \r\n17.5 参考资料 \r\n17.6 小结 \r\n\r\n第18章 远程过程调用 \r\n\r\n18.1 概述 \r\n18.2 一个简单的网络DVD商店数据库 \r\n18.2.1 BSD 套接字 \r\n18.2.2 使用BSD套接字接口的编程主题 \r\n18.2.3 ONC RPC 结构和概念 \r\n18.3 在DVD商店应用程序中使用RPC的原因 \r\n18.4 RPC工具和实用程序 \r\n18.5 将RPC应用到DVD商店\r\n18.5.1 没有参数或返回值的函数 \r\n18.5.2 带简单参数和简单返回类型的函数 \r\n18.5.3 更复杂的示例 \r\n18.5.4 返回数组 \r\n18.5.5 客户端超时\r\n18.6 认证 \r\n18.6.1 AUTH_NONE \r\n18.6.2 AUTH_UNIX \r\n18.6.3 客户端认证支持 \r\n18.6.4 服务器端认证支持\r\n18.7 用/etc/inetd.conf来使用RPC服务器 \r\n18.8 简化网络编程的其他方法 \r\n18.9 参考资料 \r\n18.10 小结 \r\n\r\n第19章 多媒体与Linux \r\n\r\n19.1 现状 \r\n19.2 程序集成 \r\n19.3 声音 \r\n19.3.1 设备\r\n19.3.2 处理标准的音频格式 \r\n19.3.3 自己编程 \r\n19.4 动画 \r\n19.4.1 软件播放器 \r\n19.4.2 硬件播放器 \r\n19.4.3 混合 \r\n19.5 政治和法律问题 \r\n19.6 参考资料 \r\n19.7 小结 \r\n\r\n第20章 CORBA \r\n\r\n20.1 接口定义语言 \r\n20.2 对象请求代理 \r\n20.3 交互操作式对象引用 \r\n20.4 对象适配器 \r\n20.5 服务器 \r\n20.6 命名和交易服务 \r\n20.7 评价CORBA \r\n20.8 CORBA与RPC\r\n20.9 CORBA和套接字 \r\n20.10 与CORBA类似的系统 \r\n20.10.1 DCOM或COM+ \r\n20.10.2 Java远程方法调用 \r\n20.10.3 企业JavaBeans \r\n20.10.4 IBM MQSeries \r\n20.10.5 SOAP \r\n20.11 IDL:定义接口 \r\n20.11.1 模块 \r\n20.11.2 接口 \r\n20.11.3 基本数据类型 \r\n20.11.4 模板类型 \r\n20.11.5 DVD应用程序示例 \r\n20.12 语言映射 \r\n20.12.1 语言映射组件 \r\n20.12.2 C映射 \r\n20.13 介绍性示例:简单消息系统 \r\n20.13.1 简单消息传递 \r\n20.13.2 在IDL中使用ORBit \r\n20.13.3 消息客户 \r\n20.13.4 消息服务器\r\n20.13.5 编辑ORBit应用程序 \r\n20.13.6 运行消息应用程序 \r\n20.14 参考资料 \r\n20.15 小结 \r\n\r\n第21章 用ORBit实现CORBA \r\n\r\n21.1 为DVD商店应用程序使用CORBA \r\n21.1.1 DVD客户 \r\n21.1.2 DVD服务器 \r\n21.1.3 日志服务器\r\n21.1.4 验证服务器\r\n21.1.5 客户代码 \r\n21.1.6 记录服务器\r\n21.1.7 DVD服务器 \r\n21.1.8 集中在一起\r\n21.2 使用libgnorba \r\n21.3 为多主机使用配置ORBit \r\n21.4 GOAD—GNOME对象活动目录 \r\n21.5 CORBA在GNOME上的使用 \r\n21.6 高级CORBA功能 \r\n21.6.1 动态接口调用\r\n21.6.2 CORBAServices \r\n21.6.3 CORBAFacilities \r\n21.6.4 设计和运行可扩展的CORBA服务 \r\n21.7 参考资料 \r\n21.8 小结 \r\n\r\n第22章 无盘系统 \r\n\r\n22.1 历史回顾 \r\n22.2 没有磁盘 \r\n22.3 为什么要建立无盘系统 \r\n22.4 它的工作原理 \r\n22.4.1 启动无盘系统\r\n22.4.2 无盘系统的网络标识 \r\n22.4.3 运行操作系统 \r\n22.5 服务器配置 \r\n22.6 创建引导镜像\r\n22.7 无盘Linux内核\r\n22.8 引导文件系统 \r\n22.9 问题 \r\n22.10 客户应用程序 \r\n22.11 小结 \r\n\r\n第23章 XML和libxml \r\n\r\n23.1 XML文档结构 \r\n23.1.1 XML语法 \r\n23.1.2 结构完善的XML \r\n23.1.3 有效的XML \r\n23.2 XML句法分析 \r\n23.2.1 DOM \r\n23.2.2 SAX \r\n23.2.3 LibXML a.k.a. gnome-xml \r\n23.2.4 完整的解析器 \r\n23.3 参考资料 \r\n23.4 小结 \r\n\r\n第24章 Beowulf群 \r\n\r\n24.1 硬件设置 \r\n24.2 软件配置 \r\n24.3 Beowulf群件编程 \r\n24.4 使用MPI编程 \r\n24.4.1 MPI程序的基本功能 \r\n24.4.2 编译并执行一个简单的MPI程序 \r\n24.4.3 分布式的MP3编码器 \r\n24.4.4 Beowulf群的通信性能\r\n24.4.5 MPI的高级特性 \r\n24.4.6 一些MPI编程的例子 \r\n24.5 用PVM编程 \r\n24.5.1 与MPI的比较 \r\n24.5.2 获取并安装PVM \r\n24.5.3 PVM库例程 \r\n24.5.4 一个PVM例子程序 \r\n24.6 参考资料 \r\n24.7 小结 \r\n\r\n第25章 文件编制 \r\n\r\n25.1 读者对象 \r\n25.2 终端用户文件编制:GUI \r\n25.2.1 在本地机上运行文件GUI \r\n25.2.2 文件Web GUI \r\n25.3 高级用户/系统管理员文件编制 \r\n25.3.1 命令行选择:提供--help \r\n25.3.2 手册页 \r\n25.3.3 保持事件在管理范围内 \r\n25.3.4 字体 \r\n25.3.5 段落 \r\n25.3.6 表 \r\n25.3.7 为API编写手册页 \r\n25.3.8 下一代manpage—info文件 \r\n25.4 从单个程序到分布系统的结构\r\n25.5 文件编制工具 \r\n25.5.1 仍然很强大的旧的TeX和LaTeX \r\n25.5.2 一个新的种类:HTML、XML和DocBook \r\n25.5.3 HOWTO和FAQ文件 \r\n25.6 开发者文件编制 \r\n25.6.1 Perl的POD方法\r\n25.6.2 文献程序编程 \r\n25.6.3 次要的文献程序编程 \r\n25.6.4 文件交换 \r\n25.6.5 PDF文件 \r\n25.7 小结 \r\n\r\n第26章 设备驱动程序 \r\n\r\n26.1 执行环境 \r\n26.2 模块和初始化代码 \r\n26.3 链接段 \r\n26.4 PCI设备和驱动程序 \r\n26.4.1 结构体pci_dev \r\n26.4.2 查找PCI设备 \r\n26.4.3 PCI驱动程序 \r\n26.4.4 PCI访问函数 \r\n26.4.5 资源分配 \r\n26.4.6 中断处理器\r\n26.4.7 访问用户空间存储器 \r\n26.4.8 kiobuf体系结构 \r\n26.4.9 锁定原语 \r\n26.4.10 调度和等待队列 \r\n26.4.11 模块使用数 \r\n26.4.12 构建 \r\n26.5 怎样处理新驱动程序 \r\n26.6 小结 \r\n\r\n第27章 应用程序的发布 \r\n\r\n27.1 RPM软件包 \r\n27.1.1 RPM用户 \r\n27.1.2 我们已经安装了什么 \r\n27.1.3 RPM数据库 \r\n27.1.4 对一个RPM包的分析 \r\n27.1.5 源代码包 \r\n27.2 Configure、autoconf和automake文件 \r\n27.3 建立一个RPM包 \r\n27.4 补丁 \r\n27.4.1 制作补丁 \r\n27.4.2 补丁的应用\r\n27.5 GNATS \r\n27.6 小结 \r\n\r\n第28章 国际化 \r\n\r\n28.1 I18N术语 \r\n28.2 Unicode是解决方案吗 \r\n28.3 字符编码问题 \r\n28.3.1 ISO 2022:编码字符集的扩展技术 \r\n28.3.2 使用Unicode编程 \r\n28.4 I18N 模型和系统环境\r\n28.4.1 POSIX本地模型 \r\n28.4.2 X/Open 兼容向导\r\n28.5 输出格式和输入处理\r\n28.6 I18N编程的实际考虑\r\n28.6.1 I18N和内部文本处理 \r\n28.6.2 用locale变量编程 \r\n28.6.3 I18N和Xlib编程 \r\n28.6.4 I18N和Linux GUI\r\n28.6.5 I18N和Linux软件开发的现状 \r\n28.7 在实际软件开发工程中的I18N \r\n28.7.1 面向对象编程和I18N \r\n28.7.2 应用生成器和I18N \r\n28.7.3 Linux I18N的下一步\r\n\r\n附录A GTK+和GNOME 对象参考 \r\n附录B DVD商店RPC协议定义 \r\n附录C 开放源代码许可 \r\n附录D 支持、勘误及P2P.Wrox.Com