内容简介
第Ⅰ部分 导论
第1章 GNU/Linux的历史
概述
Unix操作系统的历史
AT&T UNIX
BSD
GNU/LINUX的历史
GNU和自由软件基金会
Linux内核
合作
Linux的发行
小结
参考文献
第2章 GNU/Linux系统架构
概述
系统架构概要
Linux内核的架构
GNU系统库(glibc)
系统调用接口
内核组件
硬件
小结
资源
第3章 自由软件开发
概述
开放源码与自由软件
自由软件项目剖析
开源证书
GPL
Qt公共许可证
BSD许可证
证书小结
开源开发的问题
可用性/可靠性斜线上升
文档问题
自我
狂热
小结
参考文献
资源
第4章 Linux虚拟化与仿真
概述
什么是虚拟化?
虚拟化简史
虚拟化的意义
虚拟化的分类
完全虚拟化
准虚拟化
模拟
操作系统的虚拟化
硬件辅助虚拟化
开源虚拟化解决方案
QEMU
KVM
小结
第Ⅱ部分 GNU工具
第5章 GNU编译工具链
概述
编译简介
GCC的格式(编译,汇编和链接)
有用的选项
编译警告
GCC优化器
-O0优化
-O1优化(-O)
-O2优化
-Os优化
-O3优化
架构相关的优化
调试选项
其他工具
小结
第6章 应用GNU make构建软件
概述
示例项目
手工编译
buildit脚本
简单的Makefile文件
Makefile变量
模式匹配规则
自动依赖跟踪
小结
第7章 库的构建与使用
概述
什么是库?
生成静态库
共享库的生成
动态加载库
工具
file工具
size命令
nm命令
objdump工具
ranlib工具
小结
动态库API
第8章 用automake/autoconf打包
概述
一个简单的项目
Makefile解决方案
自动工具的简单运用
automake工具
autoconf工具
configure脚本
生成的Makefile文件
小结
第9章 GNU/Linux的源码控制
概述
源码控制的定义
源码控制范例
存储库的架构
修订模型
有用的源码控制工具
CVS
SVN
Git源码控制系统
小结
参考文献
资源
第10章 应用Gnuplot进行数据可视化
概述
Gnuplot
安装Gnuplot
用户界面
简单绘图
绘制文件中的数据
3D的函数绘制
3D等值线绘图
隐线消除
将图保存为文件
多图模式
使用Gnuplot的工具
小结
资源
第Ⅲ部分 应用程序开发主题
第11章 GNU/Linux的文件操作
概述
GNU/Linux的文件操作
探究文件操作API
创建一个文件句柄
打开文件
数据的读写
二进制数据的读写
基础API
小结
文件操作API
第12章 管道编程
概述
管道模型
管道和命名管道
旋风式简介
详细介绍
pipe函数
函数dup和dup2
函数mkfifo
系统命令
mkfifo命令
小结
管道编程API
第13章 套接字编程简介
概述
网络的分层模型
套接字编程的范式
主机
协议
端口
地址
套接字
客户端/服务器模式
应用程序示例
日期查询服务器
日期查询客户端
套接字API小结
创建和清除套接字
套接字地址
套接字的原语
其他“杂项”函数
其他传输协议
SCTP的特点
SCTP的特点其他
多语言视角
小结
套接字编程API
参考文献
资源
第14章 GNU/Linux进程模型
概述
GNU/Linux进程
旋风式简介
用fork创建一个子进程
与创建者进程同步
捕获信号
发出信号
传统的进程API
fork函数
wait函数
waitpid函数
signal函数
pause函数
kill函数
raise函数
exec变体
alarm函数
exit函数
POSIX信号
系统命令
ps命令
top命令
kill命令
小结
proc文件系统
资源
API小结
第15章 POSIX线程(P线程)编程
概述
什么是线程
线程函数基础
P线程API
线程基础
线程管理
线程的同步
线程互斥
线程条件变量
构建使用线程的应用程序
小结
参考资料
API小结
第16章 消息队列IPC
概述
消息队列简介
创建消息队列
配置一个消息队列
向一个消息队列中写入消息
从消息队列中读取消息
移除消息队列
消息队列API
msgget函数
msgctl函数
msgsnd函数
msgrcv函数
用户工具
小结
消息队列API函数
第17章 旗语同步
概述
旗语理论
旗语的类型
GNU/Linux旗语快速简介
创建旗语
获取和释放旗语
配置旗语
移除旗语
旗语API
semget函数
semctl函数
semop函数
用户工具
小结
旗语API
第18章 共享内存编程
概述
快速了解共享内存
创建共享内存区段
取得共享内存区段的信息
共享内存区段的挂接和脱离
使用共享内存区段
移除共享内存区段
共享内存API
shmget函数
shmctl函数
shmat函数
shmdt函数
使用共享内存区段
用户工具
小结
参考文献
共享内存API
第19章 高级文件操作
概述
测试文件类型
其他stat信息
确定当前工作目录
列举目录
使用inotify进行文件事件通知
通知过程
从文件系统中移除文件
传输数据
小结
高级文件操作API
第20章 其他应用程序开发主题
概述
使用getopt和getopt_long解析命令行选项
时间API
用sysinfo收集系统信息
使用mmap进行内存映射
锁定和解锁内存
Linux错误报告
小结
API小结
第Ⅳ部分 GNU/Linux的shell与脚本
第21章 GNU/Linux标准命令
概述
重定向
标准输入/输出/错误
环境变量
脚本调用
GNU/Linux基本命令
小结
第22章 Bourne-Again shell(Bash)
概述
预备知识
示例脚本
bash脚本
变量
条件结构
条件
case结构
循环结构
while循环
for循环
输入与输出
函数
示例脚本
简单的目录档案管理脚本
查找今天更新/创建的文件的脚本程序
其他脚本语言
小结
资源
第23章 使用sed进行编辑
概述
剖析一个简单的脚本
sed空间(缓冲器)
典型的sed命令行选项
正则表达式
操作范围
基本的sed指令
替换(s)
删除(d)
打印(P)
行的添加(a)、插入(i)以及改变(c)
退出(q)
转换(y)
行数(=)
保持样式空间(h)
小结
一些有用的sed单行程序
资源
第24章 使用awk进行文本处理
概述
awk简史
awk结构
命令行awk
脚本awk
其他awk样式
小结
有用的awk单行程序
第25章 使用flex和bison生成解析器
概述
词法分析和语法处理
词法分析器和解析器的通信
ex工具
bison工具
一个简单的语法
在bison中编写语法
连接语法解析器和词法分析器
构建一个简单的配置解析器
配置文件词法分析器
全局图像
小结
第26章 Ruby脚本编程
概述
Ruby简介
为什么使用Ruby
和其他语言的比较
Ruby快速示例
语言元素
类型和变量
控制
重复
Ruby中的字符串操作
关联数组
类与方法
高级功能
动态代码
异常处理
自省
其他功能
Ruby作为嵌入式语言
小结
资源
第27章 Python脚本编程
概述
Python简介
为什么使用Python
与其他语言的比较
Python快速示例
语言元素
类型和变量
控制
循环
Python中的字符串操作
关联数组
类与方法
高级功能
动态代码
函数式编程
异常处理
小结
资源
第28章 GNU/Linux管理基础
概述
Linux文件系统浏览
套件管理
Tar球发布
高级套件工具
内核更新
获得最新版的内核
配置内核
构建内核
安装内核
配置启动引导程序(Bootloader)
小结
第Ⅴ部分 调试与测试
第29章 软件单元测试框架
概述
单元测试
单元测试框架
打造自己的框架
C单元测试系统
嵌入单元测试
expect工具
小结
资源
第30章 用GDB进行调试
概述
为GDB进行编译
使用GDB
启动GDB
查看代码
使用断点
逐步运行程序
检查数据
改变数据
检查堆栈
停止程序
其他GDB调试主题
多进程应用程序调试
多线程应用程序调试
调试已有的进程
事后分析调试
小结
资源
第31章 代码硬化
概述
代码硬化技术
返回值
细察用户/网络的输入/输出
使用安全字符串函数
缓冲区溢出
在决定点提供逻辑选择
自识别结构体
报告错误
降低复杂度,从而减少潜在的错误
自保护的函数
最大调试输出
内存调试
编译器的支持
源码检查工具
代码跟踪
小结
资源
第32章 用GNU gcov进行覆盖测试
概述
什么是g
准备映像
使用gcov工具
查看分支概率
不完全覆盖
gcov可用的选项
注意事项
小结
参考文献
资源
第33章 用GNU gprof进行性能分析
概述
什么是性能分析
什么是gprof
准备映像
使用gprof工具
gprof可用的选项
注意事项
小结
参考文献
第34章 高级调试主题
概述
内存调试
Valgrind工具
Electric Fence
yamd工具
mtrace工具
交叉引用工具
Cscope工具
其他交叉引用工具
用ltrace跟踪系统调用
动态挂接GDB
小结
资源
附录 缩写与部分缩写词