书籍详情
GNU/Linux编程指南:入门·应用·精通
作者:(美)Kurt Wall等著;张辉译
出版社:清华大学出版社
出版时间:2002-06-01
ISBN:9787302055501
定价:¥68.00
购买这本书可以去
内容简介
本书全面而深入地介绍了GNU/Linux编程。首先介绍了在Linux上编程必备的编程工具,然后在库函数、系统调用以及内核上阐述Linux编程知识,并专门讲述了包括TCP/IP、UDP以及多播套接口在内的网络编程知识;图形界面也是本书的重点内容,本书着重讲述了文本形式的图形界面库ncurses;还分别讲解了真正图形化的流行系统X Window、Qt、GNOME以及OpenGL的基本编程方法;最后,介绍了Bash编程和设备驱动编程。本书包含大量实用实例,读者可以通过实例代码深入理解编程思想和技巧。本书另一优点是讲述了其他编程书籍通常没有提及的RPM包管理工具、文档编写以及发布许可证选择等内容,这是任何准备投身于GNU开发工作的程序员所必须具备的知识。本书对于所有Linux编程人员——无论是初学者还是高级用户——都是一本不可多得的参考资料。
作者简介
暂缺《GNU/Linux编程指南:入门·应用·精通》作者简介
目录
第1部分 Linux编程工具包
第1章 Linux及Linux编程综述
1.1 Linux变得成熟了
1.1.1 Linux的昨天
1.1.2 Linux的今天
1.1.3 Linux的明天
1.2 为何选择Linux编程
1.3 每章内容介绍
1.3.1 Linux编程工具包
1.3.2 输入、输出、文件和目录
1.3.3 进程和同步
1.3.4 网络编程
1.3.5 用户界面编程
1.3.6 特殊编程技术
1.3.7 补充内容
1.4 小结
第2章 设置开发系统
2.1 一般性考虑
2.2 主板和CPU
2.2.1 板上I/O
2.2.2 处理器
2.2.3 BIOS
2.2.4 内存
2.2.5 机箱和电源
2.3 用户交互硬件:视频、声音、键盘及鼠标
2.3.1 显卡
2.3.2 显示器
2.3.3 声卡
2.3.4 键盘及鼠标
2.4 通信设备、端口及总线
2.4.1 调制解调器
2.4.2 网络接口卡
2.4.3 SCSI
2.4.4 USB和火线(IEEE1394)
2.4.5 串行卡
2.4.6 IRDA
2.4.7 PCMCIA卡
2.4.8 ISA即插即用设备
2.5 存储设备
2.5.1 硬盘
2.5.2 可移动磁盘设备
2.5.3 CD-ROM/DVD
2.5.4 磁带备份设备
2.6 外围设备
2.6.1 打印机
2.6.2 扫描仪
2.6.3 数字相机
2.6.4 家居自动控制设备
2.7 完备型系统
2.8 便携系统
2.9 开发工具软件
2.9.1 关键库和头文件
2.9.2 调试器
2.9.3 编程工具
2.9.4 文本编辑器
2.10 小结
第3章 使用GNU CC
3.1 GNU CC特性
3.2 教学示例
3.3 常用命令行选项
3.3.1 函数库和包含文件
3.3.2 警告和出错消息选项
3.4 优化选项
3.5 调试选项
3.6 特定体系结构的选项
3.7 GNU C扩展
3.7.1 关于可移植性
3.7.2 GNU扩展
3.8 pgcc:奔腾处理器的编译器
3.9 小结
第4章 使用GNU make管理项目
4.1 为何使用make
4.2 编写makefile
4.3 编写makefile的规则
4.3.1 伪目标
4.3.2 变量
4.3.3 隐式规则
4.3.4 模式规则
4.3.5 注释
4.4 命令行选项和参数
4.5 调试make
4.6 常见的make出错信息
4.7 有用的makefile目标
4.8 小结
第5章 创建可移植的自配置软件
5.1 考虑可移植性
5.1.1 什么是程序的可移植性
5.1.2 移植性的线索和技巧
5.2 理解autoconf
5.2.1 创建configure.in
5.2.2 构造文件
5.2.3 有用的autoconf工具
5.3 内置宏
5.3.1 候选程序测试
5.3.2 库函数测试
5.3.3 头文件测试
5.3.4 结构测试
5.3.5 类型定义测试
5.3.6 编译器行为测试
5.3.7 系统服务测试
5.3.8 UNIX变体测试
5.4 普通宏
5.5 一个带注释的autoconf脚本
5.6 小结
第6章 比较和合并源代码文件
6.1 使用diff命令比较文件
6.2 理解diff3命令
6.3 准备源代码补丁
6.3.1 patch的命令行选项
6.3.2 创建补丁
6.3.3 应用补丁
6.4 小结
第7章 使用RCS和CVS控制版本
7.1 基本术语
7.2 使用修订控制系统(RCS)
7.2.1 RCS基本用法
7.2.2 找出RCS文件间的不同
7.2.3 其他RCS命令
7.3 使用并发版本系统(CVS)
7.3.1 同RCS相比的优点
7.3.2 设置CVS
7.3.3 检出源代码文件
7.3.4 将改动合并进源代码库
7.3.5 检查改动
7.3.6 添加和删除文件
7.3.7 解决文件冲突
7.3.8 CVS命令
7.3.9 CVS选项
7.4 小结
第8章 调试
8.1 为使用GDB进行编译
8.2 使用基本的GDB命令
8.2.1 启动GDB
8.2.2 在调试器中查看代码
8.2.3 检查数据
8.2.4 设置断点
8.2.5 检查并更改运行中的代码
8.3 高级GDB概念和命令
8.3.1 变量的作用域和上下文
8.3.2 遍历函数堆栈
8.3.3 操纵源代码文件
8.3.4 与Shell进行通信
8.3.5 附加到某个运行中的程序
8.4 小结
第9章 出错处理
9.1 出错处理简述
9.2 出错处理选项
9.3 C语言机制
9.3.1 assert宏
9.3.2 使用预编译
9.3.3 标准库函数
9.4 使用系统日志
9.4.1 系统日志选项
9.4.2 系统日志函数
9.4.3 用户程序
9.5 小结
第10章 使用库
10.1 使用编程库
10.1.1 库兼容性
10.1.2 命名和编号约定
10.1.3 经常使用的库
10.2 库操作工具
10.2.1 理解nm命令
10.2.2 理解ar命令
10.2.3 理解ldd命令
10.2.4 理解ldconfig
10.2.5 环境变量和配置文件
10.3 编写并使用静态库
10.4 编写并使用共享库
10.5 使用动态加载的共享对象
10.5.1 理解dl接口
10.5.2 使用dl接口
10.6 小结
第2部分 输入、输出、文件和目录
第11章 输入和输出
11.1 基本特点和概念
11.2 理解文件描述符
11.2.1 文件描述符的概念
11.2.2 文件描述符的优缺点
11.3 使用文件描述符
11.3.1 打开关闭文件描述符
11.3.2 读写文件描述符
11.3.3 使用ftruncate缩短文件
11.3.4 使用lseek定位文件指针
11.3.5 使用fsync同步到硬盘
11.3.6 使用fstat获得文件信息
11.3.7 使用fchown改变文件所有权
11.3.8 使用fchmod改变文件读写权
11.3.9 使用flock和fcntl给文件上锁
11.3.10 使用dup和dup2调用
11.3.11 使用select同时读写多个文件
11.3.12 使用ioctl
11.4 小结
第12章 文件和目录操作
12.1 标准文件函数
12.1.1 打开和关闭文件
12.1.2 读写文件
12.1.3 获得文件状态
12.2 输入输出调用
12.2.1 格式化输出
12.2.2 格式化输入
12.2.3 字符输入输出
12.2.4 行输入输出
12.2.5 文件定位
12.2.6 缓冲区控制
12.2.7 删除和改名
12.2.8 使用临时文件
12.3 目录操作
12.3.1 找到当前目录
12.3.2 改变目录
12.3.3 创建和删除目录
12.3.4 获得目录列表
12.4 特殊的ext2文件系统属性
12.5 小结
第3部分 进程和同步
第13章 进程控制
13.1 Linux进程模型
13.2 进程属性
13.2.1 进程标识号
13.2.2 Real和Effective标识号
13.2.3 SetUID和SetGID程序
13.2.4 用户和用户组信息
13.2.5 附加的进程信息
13.3 创建进程
13.3.1 使用system函数
13.3.2 fork系统调用
13.3.3 exec函数族
13.3.4 使用popen函数
13.4 控制进程
13.4.1 等待进程--wait函数族
13.4.2 杀死程序
13.5 信号
13.5.1 什么是信号
13.5.2 发送信号
13.5.3 捕获信号
13.5.4 检测信号
13.6 进程调度
13.7 小结
第14章 线程概述
14.1 什么是线程
14.2 __clone函数调用
14.3 pthread接口
14.3.1 pthread是什么
14.3.2 何时使用Pthread
14.3.3 pthread_create函数
14.3.4 pthread_exit函数
14.3.5 pthread_ join函数
14.3.6 pthread_atfork函数
14.3.7 取消线程
14.3.8 pthread cleanup宏
14.3.9 Pthread条件
14.3.10 pthread_equal函数
14.3.11 线程属性
14.3.12 互斥
14.4 小结
第15章 访问系统信息
15.1 进程信息
15.1.1 cmdline文件
15.1.2 environ文件
15.1.3 fd目录
15.1.4 mem文件
15.1.5 stat
15.1.6 status文件
15.1.7 cwd符号链接
15.1.8 exe符号链接
15.1.9 maps文件
15.1.10 root符号链接
15.1.11 statm文件
15.2 一般系统信息
15.2.1 /proc/cmdline文件
15.2.2 /proc/cpuinfo文件
15.2.3 /proc/devices文件
15.2.4 /proc/dma文件
15.2.5 /proc/file systems文件
15.2.6 /proc/interrupts文件
15.2.7 /proc/ioports文件
15.2.8 /proc/kcore文件
15.2.9 /proc/kmsg文件
15.2.10 /proc/ksyms文件
15.2.11 /proc/loadavg文件
15.2.12 /proc/locks文件
15.2.13 /proc/mdstat文件
15.2.14 /proc/meminfo文件
15.2.15 /proc/misc文件
15.2.16 /proc/modues文件
15.2.17 /proc/mounts文件
15.2.18 /proc/pci文件
15.2.19 /proc/rtc文件
15.2.20 /proc/stat文件
15.2.21 /proc/uptime文件
15.2.22 /proc/version文件
15.2.23 /proc/net子目录
15.2.24 /proc/scsi子目录
15.2.25 /proc/sys子目录
15.3 未来内核中/proc的变化
15.4 小结
第16章 内存管理
16.1 C内存管理回顾
16.1.1 malloc函数的使用
16.1.2 calloc函数的使用
16.1.3 realloc函数的使用
16.1.4 free函数的使用
16.1.5 alloca函数的使用
16.2 内存映像文件
16.2.1 mmap函数的使用
16.2.2 munmap函数的使用
16.2.3 msync函数的使用
16.2.4 mprotect函数的使用
16.2.5 锁定内存
16.2.6 mremap函数的使用
16.2.7 用内存映像实现cat命令
16.3 发现并修改内存问题
16.3.1 一个有问题的程序
16.3.2 Electric Fence
16.4 小结
第17章 进程间通信
17.1 管道
17.1.1 打开和关闭管道
17.1.2 读写管道
17.1.3 更简单的方法
17.2 FIFO
17.2.1 理解FIFO
17.2.2 创建FIFO
17.2.3 打开和关闭FIFO
17.2.4 读写FIFO
17.3 System V IPC概述
17.3.1 System V IPC的主要概念
17.3.2 System V IPC的问题
17.3.3 Linux和System V IPC
17.4 共享内存
17.4.1 创建共享内存区
17.4.2 附加共享内存区
17.5 消息队列
17.5.1 创建和打开消息队列
17.5.2 向队列中写入消息
17.5.3 读取队列中的消息
17.5.4 删除消息队列
17.6 信号灯
17.6.1 创建信号灯
17.6.2 控制和删除信号灯
17.7 小结
第18章 守护进程
18.1 理解守护进程
18.2 创建守护进程
18.2.1 函数调用
18.2.2 出错处理
18.3 和守护进程通信
18.3.1 读取配置文件
18.3.2 向守护进程加入信号处理功能
18.4 小结
第4部分 网络编程
第19章 TCP/IP和套接口编程
19.1 套接口的定义
19.2 通信域
19.3 套接口编程基础
19.3.1 分配套接口和初始化
19.3.2 完成连接的系统调用
19.3.3 传送数据
19.3.4 关闭
19.4 使用套接口的客户机/服务器例子程序
19.4.1 服务器的例子程序
19.4.2 客户机的例子程序
19.4.3 运行客户机和服务器的例子程序
19.4.4 使用Web浏览器作为客户机运行服务器的例子程序
19.5 一个简单的Web服务器和Web客户机的例子程序
19.5.1 实现一个简单的Web服务器
19.5.2 实现一个简单的Web客户机
19.5.3 测试Web服务器和Web客户机
19.5.4 使用Netscape Navigator作为客户机运行简单的Web服务器
19.6 通过其他编程语言使用套接口
19.7 UNIX域套接口的Perl编程
19.8 监视套接口活动的工具
19.9 小结
第20章 UDP:用户数据报协议
20.1 UDP概述
20.1.1 UDP和TCP的对比
20.1.2 TCP的优缺点
20.1.3 UDP的优缺点
20.1.4 选择使用哪一种协议
20.2 实现一个基于UDP的应用
20.2.1 使用UDP发送数据
20.2.2 接收UDP数据
20.2.3 最少的出错检查
20.2.4 非阻塞I/O
20.3 小结
第21章 多播套接口和非阻塞I/O
21.1 配置Linux支持多播IP
21.2 为支持多播IP重新编译Linux内核
21.3 多播IP广播的示例程序
21.3.1 使用多播IP广播数据
21.3.2 创建客户程序监听多播IP广播
21.3.3 运行多播IP示例程序
21.4 小结
第5部分 用户界面编程
第22章 底层终端控制
22.1 终端接口
22.2 控制终端
22.2.1 属性控制函数
22.2.2 速度控制函数
22.2.3 行控制函数
22.2.4 进程控制函数
22.3 使用终端接口
22.4 改变终端模式
22.5 使用terminfo
22.5.1 terminfo能力
22.5.2 terminfo编程
22.5.3 发挥terminfo能力
22.6 小结
第23章 ncurses入门
23.1 ncurses简史
23.2 使用ncurses编译程序
23.3 调试ncurses程序
23.4 关于窗口
23.4.1 ncurses窗口设计
23.4.2 ncurses函数命名规则
23.5 初始化和终止
23.5.1 ncurses初始化结构
23.5.2 ncurses终止
23.5.3 说明ncurses初始化和终止
23.6 输入和输出
23.6.1 输出例程
23.6.2 输入例程
23.7 色彩例程
23.8 窗口管理
23.9 其他各种工具函数
23.10 小结
第24章 ncurses高级编程
24.1 其他ncurses功能
24.1.1 鼠标支持
24.1.2 菜单支持
24.1.3 窗体支持
24.2 和鼠标交互
24.2.1 鼠标API概述
24.2.2 鼠标控制例程
24.2.3 示例程序
24.3 使用菜单
24.3.1 菜单API概述
24.3.2 菜单控制例程
24.3.3 示例程序
24.4 ncurses窗体
24.4.1 窗体API概述
24.4.2 窗体管理例程
24.4.3 示例程序
24.5 小结
第25章 X Windows编程
25.1 X的概念
25.2 Xlib API
25.2.1 XOpenDisplay
25.2.2 XCreateSimpleWindow和XCreateWindow
25.2.3 映射窗口和撤销映射窗口
25.2.4 撤销窗口
25.2.5 事件处理
25.2.6 初始化图形设备上下文和字体
25.2.7 在X窗口中绘图
25.2.8 一个Xlib的示例程序
25.3 X Toolkit API
25.3.1 X Toolkit使用入门
25.3.2 使用X工具包设置窗口部件参数
25.4 XFree86
25.4.1 DPMS--显示器电源管理信令
25.4.2 DRI--直接显示接口
25.4.3 DGA--直接图形体系结构
25.4.4 XV--X视频
25.5 小结
第26章 Athena、Motif和LessTif窗口部件
26.1 使用Athena的窗口部件
26.1.1 Athena的标签窗口部件
26.1.2 Athena的命令按钮窗口部件
26.1.3 Athena的列表窗口部件
26.1.4 Athena的文本窗口部件
26.1.5 Athena的简单菜单窗口部件
26.2 使用Motif的窗口部件
26.2.1 Motif的标签窗口部件
26.2.2 Motif的列表窗口部件
26.2.3 Motif的文本窗口部件
26.3 编写一个定制的Athena窗口部件
26.3.1 使用fetch_url.c文件
26.3.2 使用URL.h文件
26.3.3 使用URLP.h文件
26.3.4 使用URL.c文件
26.3.5 测试URLWidget
26.4 在C++程序中使用Athena和Motif
26.5 使用封装Athena窗口部件的一个C++类库
26.5.1 Component类
26.5.2 PaneWindow类
26.5.3 Label类
26.5.4 Button类
26.5.5 Text类
26.6 小结
第27章 使用GTK+进行GUI编程
27.1 GTK+简介
27.1.1 在GTK+中处理事件
27.1.2 使用GTK+的简短示例程序
27.1.3 各种GTK窗口部件
27.1.4 GTK容器窗口部件
27.2 一个用于显示XML文件的GTK+程序
27.2.1 XML简介
27.2.2 James Clark的XML分析器expat
27.2.3 实现GTK+的XML显示程序
27.2.4 运行GTK+的XML显示程序
27.3 一个使用Notebook窗口部件的GUI程序
27.3.1 Notebook窗口部件示例程序的实现
27.3.2 实现Drawing窗口部件
27.3.3 运行GTK Notebook窗口部件的示例程序
27.4 通过其他编程语言使用GTK+
27.4.1 通过C++使用GTK+
27.4.2 通过Perl使用GTK+
27.4.3 通过Python使用GTK+
27.5 GTK+的RAD工具
27.6 小结
第28章 使用Qt进行GUI编程
28.1 通过重载QWidget类方法处理事件
28.1.1 QWidget类概述
28.1.2 实现DrawWidget类
28.1.3 测试DrawWidget
28.2 使用Qt槽和信号处理事件
28.2.1 派生StateLCDWidget类
28.2.2 使用信号和槽
28.2.3 运行信号/槽示例程序
28.3 用Qt实现XMLview的程序
28.3.1 SAX2:一个用于XML的简单API
28.3.2 DOM:文档目标对象
28.4 小结
第29章 使用OpenGL和Mesa进行3D图形编程
29.1 需要为本章准备什么
29.2 使用OpenGL
29.3 3D图形编程
29.3.1 orbits.c
29.3.2 为OpenGL图形创建窗口并初始化OpenGL
29.3.3 使用GLUT创建简单的3D对象
29.3.4 使用x-y-z坐标在3D空间中放置对象
29.3.5 沿着x-、y-、z-中任一坐标轴或所有坐标轴旋转对象
29.3.6 启用Material属性
29.3.7 启用深度测试
29.3.8 处理键盘事件
29.3.9 为获得动画效果更新OpenGL图形
29.3.10 Orbits程序清单
29.4 纹理映像
29.4.1 用纹理面产生立方体
29.4.2 创建纹理映像
29.4.3 立方体程序清单
29.5 小结
第6部分 特殊编程技术
第30章 使用GNU Bash进行Shell编程
30.1 为何使用bash
30.2 bash基础知识
30.2.1 通配符
30.2.2 花括号展开式
30.2.3 特殊字符
30.3 使用bash变量
30.4 使用bash操作符
30.4.1 字符串操作符
30.4.2 模式匹配操作符
30.5 流控制
30.5.1 条件执行:if
30.5.2 确定性循环:for
30.5.3 不确定性循环:while和until
30.5.4 选择结构:case和select
30.6 shell函数
30.7 输入与输出
30.7.1 I/O重定向
30.7.2 字符串I/O
30.8 命令行处理
30.9 进程和作业控制
30.9.1 Shell的信号处理
30.9.2 使用trap
30.10 小结
第31章 设备驱动程序
31.1 驱动程序的类型
31.1.1 静态链接的内核设备驱动程序
31.1.2 可加载的内核模块
31.1.3 共享库
31.1.4 无特权用户模式程序
31.1.5 特权用户模式程序
31.1.6 守护进程
31.1.7 字符设备与块设备的对比
31.2 怎样构造硬件
31.2.1 理解步进电机的工作原理
31.2.2 标准的或双向的并口
31.3 建立开发环境
31.4 调试内核级驱动程序
31.5 设备驱动程序内幕
31.5.1 低层端口的I/O
31.5.2 使用DMA访问内存
31.5.3 引发使用设备驱动程序的中断
31.5.4 设备驱动程序分层
31.6 简单的用户模式测试驱动程序
31.7 创建内核驱动程序
31.7.1 查看源代码
31.7.2 编译驱动程序
31.7.3 使用内核驱动程序
31.7.4 未来发展方向
31.8 其他信息资源
31.9 小结
第7部分 补充内容
第32章 软件包管理
32.1 理解tar文件
32.1.1 创建tar文件
32.1.2 更新tar文件
32.1.3 列出tar文件的内容
32.1.4 从一个存档文件解出文件
32.2 理解install命令
32.3 理解Red Hat包管理器(RPM)
32.3.1 RPM是什么
32.3.2 最小要求
32.3.3 配置RPM
32.3.4 控制构造过程:使用spec文件
32.3.5 分析一个spec文件
32.3.6 构造软件包
32.4 文件层次结构标准
32.5 小结
第33章 建档
33.1 编写手册页面
33.1.1 手册页面的组成
33.1.2 手册页面的例子
33.1.3 使用groff命令
33.1.4 Linux约定
33.2 使用DocBook
33.2.1 DocBook是什么
33.2.2 DocBook标记
33.2.3 DocBook文档示例
33.2.4 生成输出
33.3 小结
第34章 许可证的发放
34.1 介绍和弃权
34.2 MIT/X风格的许可证
34.3 BSD风格的许可证
34.4 Artistic的许可证
34.5 GNU通用公共许可证
34.5.1 GNU通用公共许可证(GPL)
34.5.2 GNU库通用公共许可证(LGPL)
34.6 开发源代码的定义
34.7 小结
第1章 Linux及Linux编程综述
1.1 Linux变得成熟了
1.1.1 Linux的昨天
1.1.2 Linux的今天
1.1.3 Linux的明天
1.2 为何选择Linux编程
1.3 每章内容介绍
1.3.1 Linux编程工具包
1.3.2 输入、输出、文件和目录
1.3.3 进程和同步
1.3.4 网络编程
1.3.5 用户界面编程
1.3.6 特殊编程技术
1.3.7 补充内容
1.4 小结
第2章 设置开发系统
2.1 一般性考虑
2.2 主板和CPU
2.2.1 板上I/O
2.2.2 处理器
2.2.3 BIOS
2.2.4 内存
2.2.5 机箱和电源
2.3 用户交互硬件:视频、声音、键盘及鼠标
2.3.1 显卡
2.3.2 显示器
2.3.3 声卡
2.3.4 键盘及鼠标
2.4 通信设备、端口及总线
2.4.1 调制解调器
2.4.2 网络接口卡
2.4.3 SCSI
2.4.4 USB和火线(IEEE1394)
2.4.5 串行卡
2.4.6 IRDA
2.4.7 PCMCIA卡
2.4.8 ISA即插即用设备
2.5 存储设备
2.5.1 硬盘
2.5.2 可移动磁盘设备
2.5.3 CD-ROM/DVD
2.5.4 磁带备份设备
2.6 外围设备
2.6.1 打印机
2.6.2 扫描仪
2.6.3 数字相机
2.6.4 家居自动控制设备
2.7 完备型系统
2.8 便携系统
2.9 开发工具软件
2.9.1 关键库和头文件
2.9.2 调试器
2.9.3 编程工具
2.9.4 文本编辑器
2.10 小结
第3章 使用GNU CC
3.1 GNU CC特性
3.2 教学示例
3.3 常用命令行选项
3.3.1 函数库和包含文件
3.3.2 警告和出错消息选项
3.4 优化选项
3.5 调试选项
3.6 特定体系结构的选项
3.7 GNU C扩展
3.7.1 关于可移植性
3.7.2 GNU扩展
3.8 pgcc:奔腾处理器的编译器
3.9 小结
第4章 使用GNU make管理项目
4.1 为何使用make
4.2 编写makefile
4.3 编写makefile的规则
4.3.1 伪目标
4.3.2 变量
4.3.3 隐式规则
4.3.4 模式规则
4.3.5 注释
4.4 命令行选项和参数
4.5 调试make
4.6 常见的make出错信息
4.7 有用的makefile目标
4.8 小结
第5章 创建可移植的自配置软件
5.1 考虑可移植性
5.1.1 什么是程序的可移植性
5.1.2 移植性的线索和技巧
5.2 理解autoconf
5.2.1 创建configure.in
5.2.2 构造文件
5.2.3 有用的autoconf工具
5.3 内置宏
5.3.1 候选程序测试
5.3.2 库函数测试
5.3.3 头文件测试
5.3.4 结构测试
5.3.5 类型定义测试
5.3.6 编译器行为测试
5.3.7 系统服务测试
5.3.8 UNIX变体测试
5.4 普通宏
5.5 一个带注释的autoconf脚本
5.6 小结
第6章 比较和合并源代码文件
6.1 使用diff命令比较文件
6.2 理解diff3命令
6.3 准备源代码补丁
6.3.1 patch的命令行选项
6.3.2 创建补丁
6.3.3 应用补丁
6.4 小结
第7章 使用RCS和CVS控制版本
7.1 基本术语
7.2 使用修订控制系统(RCS)
7.2.1 RCS基本用法
7.2.2 找出RCS文件间的不同
7.2.3 其他RCS命令
7.3 使用并发版本系统(CVS)
7.3.1 同RCS相比的优点
7.3.2 设置CVS
7.3.3 检出源代码文件
7.3.4 将改动合并进源代码库
7.3.5 检查改动
7.3.6 添加和删除文件
7.3.7 解决文件冲突
7.3.8 CVS命令
7.3.9 CVS选项
7.4 小结
第8章 调试
8.1 为使用GDB进行编译
8.2 使用基本的GDB命令
8.2.1 启动GDB
8.2.2 在调试器中查看代码
8.2.3 检查数据
8.2.4 设置断点
8.2.5 检查并更改运行中的代码
8.3 高级GDB概念和命令
8.3.1 变量的作用域和上下文
8.3.2 遍历函数堆栈
8.3.3 操纵源代码文件
8.3.4 与Shell进行通信
8.3.5 附加到某个运行中的程序
8.4 小结
第9章 出错处理
9.1 出错处理简述
9.2 出错处理选项
9.3 C语言机制
9.3.1 assert宏
9.3.2 使用预编译
9.3.3 标准库函数
9.4 使用系统日志
9.4.1 系统日志选项
9.4.2 系统日志函数
9.4.3 用户程序
9.5 小结
第10章 使用库
10.1 使用编程库
10.1.1 库兼容性
10.1.2 命名和编号约定
10.1.3 经常使用的库
10.2 库操作工具
10.2.1 理解nm命令
10.2.2 理解ar命令
10.2.3 理解ldd命令
10.2.4 理解ldconfig
10.2.5 环境变量和配置文件
10.3 编写并使用静态库
10.4 编写并使用共享库
10.5 使用动态加载的共享对象
10.5.1 理解dl接口
10.5.2 使用dl接口
10.6 小结
第2部分 输入、输出、文件和目录
第11章 输入和输出
11.1 基本特点和概念
11.2 理解文件描述符
11.2.1 文件描述符的概念
11.2.2 文件描述符的优缺点
11.3 使用文件描述符
11.3.1 打开关闭文件描述符
11.3.2 读写文件描述符
11.3.3 使用ftruncate缩短文件
11.3.4 使用lseek定位文件指针
11.3.5 使用fsync同步到硬盘
11.3.6 使用fstat获得文件信息
11.3.7 使用fchown改变文件所有权
11.3.8 使用fchmod改变文件读写权
11.3.9 使用flock和fcntl给文件上锁
11.3.10 使用dup和dup2调用
11.3.11 使用select同时读写多个文件
11.3.12 使用ioctl
11.4 小结
第12章 文件和目录操作
12.1 标准文件函数
12.1.1 打开和关闭文件
12.1.2 读写文件
12.1.3 获得文件状态
12.2 输入输出调用
12.2.1 格式化输出
12.2.2 格式化输入
12.2.3 字符输入输出
12.2.4 行输入输出
12.2.5 文件定位
12.2.6 缓冲区控制
12.2.7 删除和改名
12.2.8 使用临时文件
12.3 目录操作
12.3.1 找到当前目录
12.3.2 改变目录
12.3.3 创建和删除目录
12.3.4 获得目录列表
12.4 特殊的ext2文件系统属性
12.5 小结
第3部分 进程和同步
第13章 进程控制
13.1 Linux进程模型
13.2 进程属性
13.2.1 进程标识号
13.2.2 Real和Effective标识号
13.2.3 SetUID和SetGID程序
13.2.4 用户和用户组信息
13.2.5 附加的进程信息
13.3 创建进程
13.3.1 使用system函数
13.3.2 fork系统调用
13.3.3 exec函数族
13.3.4 使用popen函数
13.4 控制进程
13.4.1 等待进程--wait函数族
13.4.2 杀死程序
13.5 信号
13.5.1 什么是信号
13.5.2 发送信号
13.5.3 捕获信号
13.5.4 检测信号
13.6 进程调度
13.7 小结
第14章 线程概述
14.1 什么是线程
14.2 __clone函数调用
14.3 pthread接口
14.3.1 pthread是什么
14.3.2 何时使用Pthread
14.3.3 pthread_create函数
14.3.4 pthread_exit函数
14.3.5 pthread_ join函数
14.3.6 pthread_atfork函数
14.3.7 取消线程
14.3.8 pthread cleanup宏
14.3.9 Pthread条件
14.3.10 pthread_equal函数
14.3.11 线程属性
14.3.12 互斥
14.4 小结
第15章 访问系统信息
15.1 进程信息
15.1.1 cmdline文件
15.1.2 environ文件
15.1.3 fd目录
15.1.4 mem文件
15.1.5 stat
15.1.6 status文件
15.1.7 cwd符号链接
15.1.8 exe符号链接
15.1.9 maps文件
15.1.10 root符号链接
15.1.11 statm文件
15.2 一般系统信息
15.2.1 /proc/cmdline文件
15.2.2 /proc/cpuinfo文件
15.2.3 /proc/devices文件
15.2.4 /proc/dma文件
15.2.5 /proc/file systems文件
15.2.6 /proc/interrupts文件
15.2.7 /proc/ioports文件
15.2.8 /proc/kcore文件
15.2.9 /proc/kmsg文件
15.2.10 /proc/ksyms文件
15.2.11 /proc/loadavg文件
15.2.12 /proc/locks文件
15.2.13 /proc/mdstat文件
15.2.14 /proc/meminfo文件
15.2.15 /proc/misc文件
15.2.16 /proc/modues文件
15.2.17 /proc/mounts文件
15.2.18 /proc/pci文件
15.2.19 /proc/rtc文件
15.2.20 /proc/stat文件
15.2.21 /proc/uptime文件
15.2.22 /proc/version文件
15.2.23 /proc/net子目录
15.2.24 /proc/scsi子目录
15.2.25 /proc/sys子目录
15.3 未来内核中/proc的变化
15.4 小结
第16章 内存管理
16.1 C内存管理回顾
16.1.1 malloc函数的使用
16.1.2 calloc函数的使用
16.1.3 realloc函数的使用
16.1.4 free函数的使用
16.1.5 alloca函数的使用
16.2 内存映像文件
16.2.1 mmap函数的使用
16.2.2 munmap函数的使用
16.2.3 msync函数的使用
16.2.4 mprotect函数的使用
16.2.5 锁定内存
16.2.6 mremap函数的使用
16.2.7 用内存映像实现cat命令
16.3 发现并修改内存问题
16.3.1 一个有问题的程序
16.3.2 Electric Fence
16.4 小结
第17章 进程间通信
17.1 管道
17.1.1 打开和关闭管道
17.1.2 读写管道
17.1.3 更简单的方法
17.2 FIFO
17.2.1 理解FIFO
17.2.2 创建FIFO
17.2.3 打开和关闭FIFO
17.2.4 读写FIFO
17.3 System V IPC概述
17.3.1 System V IPC的主要概念
17.3.2 System V IPC的问题
17.3.3 Linux和System V IPC
17.4 共享内存
17.4.1 创建共享内存区
17.4.2 附加共享内存区
17.5 消息队列
17.5.1 创建和打开消息队列
17.5.2 向队列中写入消息
17.5.3 读取队列中的消息
17.5.4 删除消息队列
17.6 信号灯
17.6.1 创建信号灯
17.6.2 控制和删除信号灯
17.7 小结
第18章 守护进程
18.1 理解守护进程
18.2 创建守护进程
18.2.1 函数调用
18.2.2 出错处理
18.3 和守护进程通信
18.3.1 读取配置文件
18.3.2 向守护进程加入信号处理功能
18.4 小结
第4部分 网络编程
第19章 TCP/IP和套接口编程
19.1 套接口的定义
19.2 通信域
19.3 套接口编程基础
19.3.1 分配套接口和初始化
19.3.2 完成连接的系统调用
19.3.3 传送数据
19.3.4 关闭
19.4 使用套接口的客户机/服务器例子程序
19.4.1 服务器的例子程序
19.4.2 客户机的例子程序
19.4.3 运行客户机和服务器的例子程序
19.4.4 使用Web浏览器作为客户机运行服务器的例子程序
19.5 一个简单的Web服务器和Web客户机的例子程序
19.5.1 实现一个简单的Web服务器
19.5.2 实现一个简单的Web客户机
19.5.3 测试Web服务器和Web客户机
19.5.4 使用Netscape Navigator作为客户机运行简单的Web服务器
19.6 通过其他编程语言使用套接口
19.7 UNIX域套接口的Perl编程
19.8 监视套接口活动的工具
19.9 小结
第20章 UDP:用户数据报协议
20.1 UDP概述
20.1.1 UDP和TCP的对比
20.1.2 TCP的优缺点
20.1.3 UDP的优缺点
20.1.4 选择使用哪一种协议
20.2 实现一个基于UDP的应用
20.2.1 使用UDP发送数据
20.2.2 接收UDP数据
20.2.3 最少的出错检查
20.2.4 非阻塞I/O
20.3 小结
第21章 多播套接口和非阻塞I/O
21.1 配置Linux支持多播IP
21.2 为支持多播IP重新编译Linux内核
21.3 多播IP广播的示例程序
21.3.1 使用多播IP广播数据
21.3.2 创建客户程序监听多播IP广播
21.3.3 运行多播IP示例程序
21.4 小结
第5部分 用户界面编程
第22章 底层终端控制
22.1 终端接口
22.2 控制终端
22.2.1 属性控制函数
22.2.2 速度控制函数
22.2.3 行控制函数
22.2.4 进程控制函数
22.3 使用终端接口
22.4 改变终端模式
22.5 使用terminfo
22.5.1 terminfo能力
22.5.2 terminfo编程
22.5.3 发挥terminfo能力
22.6 小结
第23章 ncurses入门
23.1 ncurses简史
23.2 使用ncurses编译程序
23.3 调试ncurses程序
23.4 关于窗口
23.4.1 ncurses窗口设计
23.4.2 ncurses函数命名规则
23.5 初始化和终止
23.5.1 ncurses初始化结构
23.5.2 ncurses终止
23.5.3 说明ncurses初始化和终止
23.6 输入和输出
23.6.1 输出例程
23.6.2 输入例程
23.7 色彩例程
23.8 窗口管理
23.9 其他各种工具函数
23.10 小结
第24章 ncurses高级编程
24.1 其他ncurses功能
24.1.1 鼠标支持
24.1.2 菜单支持
24.1.3 窗体支持
24.2 和鼠标交互
24.2.1 鼠标API概述
24.2.2 鼠标控制例程
24.2.3 示例程序
24.3 使用菜单
24.3.1 菜单API概述
24.3.2 菜单控制例程
24.3.3 示例程序
24.4 ncurses窗体
24.4.1 窗体API概述
24.4.2 窗体管理例程
24.4.3 示例程序
24.5 小结
第25章 X Windows编程
25.1 X的概念
25.2 Xlib API
25.2.1 XOpenDisplay
25.2.2 XCreateSimpleWindow和XCreateWindow
25.2.3 映射窗口和撤销映射窗口
25.2.4 撤销窗口
25.2.5 事件处理
25.2.6 初始化图形设备上下文和字体
25.2.7 在X窗口中绘图
25.2.8 一个Xlib的示例程序
25.3 X Toolkit API
25.3.1 X Toolkit使用入门
25.3.2 使用X工具包设置窗口部件参数
25.4 XFree86
25.4.1 DPMS--显示器电源管理信令
25.4.2 DRI--直接显示接口
25.4.3 DGA--直接图形体系结构
25.4.4 XV--X视频
25.5 小结
第26章 Athena、Motif和LessTif窗口部件
26.1 使用Athena的窗口部件
26.1.1 Athena的标签窗口部件
26.1.2 Athena的命令按钮窗口部件
26.1.3 Athena的列表窗口部件
26.1.4 Athena的文本窗口部件
26.1.5 Athena的简单菜单窗口部件
26.2 使用Motif的窗口部件
26.2.1 Motif的标签窗口部件
26.2.2 Motif的列表窗口部件
26.2.3 Motif的文本窗口部件
26.3 编写一个定制的Athena窗口部件
26.3.1 使用fetch_url.c文件
26.3.2 使用URL.h文件
26.3.3 使用URLP.h文件
26.3.4 使用URL.c文件
26.3.5 测试URLWidget
26.4 在C++程序中使用Athena和Motif
26.5 使用封装Athena窗口部件的一个C++类库
26.5.1 Component类
26.5.2 PaneWindow类
26.5.3 Label类
26.5.4 Button类
26.5.5 Text类
26.6 小结
第27章 使用GTK+进行GUI编程
27.1 GTK+简介
27.1.1 在GTK+中处理事件
27.1.2 使用GTK+的简短示例程序
27.1.3 各种GTK窗口部件
27.1.4 GTK容器窗口部件
27.2 一个用于显示XML文件的GTK+程序
27.2.1 XML简介
27.2.2 James Clark的XML分析器expat
27.2.3 实现GTK+的XML显示程序
27.2.4 运行GTK+的XML显示程序
27.3 一个使用Notebook窗口部件的GUI程序
27.3.1 Notebook窗口部件示例程序的实现
27.3.2 实现Drawing窗口部件
27.3.3 运行GTK Notebook窗口部件的示例程序
27.4 通过其他编程语言使用GTK+
27.4.1 通过C++使用GTK+
27.4.2 通过Perl使用GTK+
27.4.3 通过Python使用GTK+
27.5 GTK+的RAD工具
27.6 小结
第28章 使用Qt进行GUI编程
28.1 通过重载QWidget类方法处理事件
28.1.1 QWidget类概述
28.1.2 实现DrawWidget类
28.1.3 测试DrawWidget
28.2 使用Qt槽和信号处理事件
28.2.1 派生StateLCDWidget类
28.2.2 使用信号和槽
28.2.3 运行信号/槽示例程序
28.3 用Qt实现XMLview的程序
28.3.1 SAX2:一个用于XML的简单API
28.3.2 DOM:文档目标对象
28.4 小结
第29章 使用OpenGL和Mesa进行3D图形编程
29.1 需要为本章准备什么
29.2 使用OpenGL
29.3 3D图形编程
29.3.1 orbits.c
29.3.2 为OpenGL图形创建窗口并初始化OpenGL
29.3.3 使用GLUT创建简单的3D对象
29.3.4 使用x-y-z坐标在3D空间中放置对象
29.3.5 沿着x-、y-、z-中任一坐标轴或所有坐标轴旋转对象
29.3.6 启用Material属性
29.3.7 启用深度测试
29.3.8 处理键盘事件
29.3.9 为获得动画效果更新OpenGL图形
29.3.10 Orbits程序清单
29.4 纹理映像
29.4.1 用纹理面产生立方体
29.4.2 创建纹理映像
29.4.3 立方体程序清单
29.5 小结
第6部分 特殊编程技术
第30章 使用GNU Bash进行Shell编程
30.1 为何使用bash
30.2 bash基础知识
30.2.1 通配符
30.2.2 花括号展开式
30.2.3 特殊字符
30.3 使用bash变量
30.4 使用bash操作符
30.4.1 字符串操作符
30.4.2 模式匹配操作符
30.5 流控制
30.5.1 条件执行:if
30.5.2 确定性循环:for
30.5.3 不确定性循环:while和until
30.5.4 选择结构:case和select
30.6 shell函数
30.7 输入与输出
30.7.1 I/O重定向
30.7.2 字符串I/O
30.8 命令行处理
30.9 进程和作业控制
30.9.1 Shell的信号处理
30.9.2 使用trap
30.10 小结
第31章 设备驱动程序
31.1 驱动程序的类型
31.1.1 静态链接的内核设备驱动程序
31.1.2 可加载的内核模块
31.1.3 共享库
31.1.4 无特权用户模式程序
31.1.5 特权用户模式程序
31.1.6 守护进程
31.1.7 字符设备与块设备的对比
31.2 怎样构造硬件
31.2.1 理解步进电机的工作原理
31.2.2 标准的或双向的并口
31.3 建立开发环境
31.4 调试内核级驱动程序
31.5 设备驱动程序内幕
31.5.1 低层端口的I/O
31.5.2 使用DMA访问内存
31.5.3 引发使用设备驱动程序的中断
31.5.4 设备驱动程序分层
31.6 简单的用户模式测试驱动程序
31.7 创建内核驱动程序
31.7.1 查看源代码
31.7.2 编译驱动程序
31.7.3 使用内核驱动程序
31.7.4 未来发展方向
31.8 其他信息资源
31.9 小结
第7部分 补充内容
第32章 软件包管理
32.1 理解tar文件
32.1.1 创建tar文件
32.1.2 更新tar文件
32.1.3 列出tar文件的内容
32.1.4 从一个存档文件解出文件
32.2 理解install命令
32.3 理解Red Hat包管理器(RPM)
32.3.1 RPM是什么
32.3.2 最小要求
32.3.3 配置RPM
32.3.4 控制构造过程:使用spec文件
32.3.5 分析一个spec文件
32.3.6 构造软件包
32.4 文件层次结构标准
32.5 小结
第33章 建档
33.1 编写手册页面
33.1.1 手册页面的组成
33.1.2 手册页面的例子
33.1.3 使用groff命令
33.1.4 Linux约定
33.2 使用DocBook
33.2.1 DocBook是什么
33.2.2 DocBook标记
33.2.3 DocBook文档示例
33.2.4 生成输出
33.3 小结
第34章 许可证的发放
34.1 介绍和弃权
34.2 MIT/X风格的许可证
34.3 BSD风格的许可证
34.4 Artistic的许可证
34.5 GNU通用公共许可证
34.5.1 GNU通用公共许可证(GPL)
34.5.2 GNU库通用公共许可证(LGPL)
34.6 开发源代码的定义
34.7 小结
猜您喜欢