第1章 Linux编程基础 1
1.1 编程基础 2
1.1.1 C语言的历史 2
1.1.2 vi简介 3
1.1.3 ?的安装与启用 4
1.2 Linux下C程序的开发步骤 8
1.2.1 设计程序和编写源代码 8
1.2.2 编译源代码 11
1.2.3 运行 12
1.2.4 调试 12
1.2.5 修改与维护 13
1.3 小结 13
第2章 从C到C++ 15
2.1.2 C++程序的基本结构 16
2.1 C++基础知识 16
2.1.1 C++语言介绍 16
2.1.3 编译与运行 20
2.2 类 21
2.2.1 类的概念 22
2.2.2 构造函数和析构函数 24
2.2.3 类成员 29
2.2.4 友员、嵌套与结构 36
2.3 派生 40
2.3.1 派生类 40
2.3.2 访问基类中的成员 45
2.3.3 多继承 47
2.4 小结 50
第3章 Linux开发环境 53
3.1.1 Linux下开发环境简介 54
3.1 Linux下开发环境 54
3.1.2 集成开发环境 55
3.2 集成软件开发环境WipeOut 61
3.2.1 WipeOut的组件和特性 61
3.2.2 版本浏览器 62
3.2.3 WipeOut的所见即所得 64
3.2.4 版本控制 66
3.2.5 编辑器 67
3.2.6 语法醒目性 68
3.2.7 Make-Shell 68
3.2.8 调试器 69
3.2.9 编写自己的WipeOut组件 71
3.3 小结 71
第4章 Linux符号调试器gdb 73
4.1 gdb介绍 74
4.2 gdb使用 78
4.2.1 gdb基本命令 78
4.2.2 启动方式 78
4.2.3 命令说明 78
4.2.4 运行gdb的详细说明 79
4.2.5 gdb测试步骤 80
4.2.6 模式的选择 81
4.2.7 退出gdb 82
4.2.8 Shell命令 82
4.2.9 Command语法 82
4.2.10 输入命令的技巧 83
4.2.11 得到帮助 83
4.2.12 在gdb下运行程序 85
4.2.13 停止和继续 90
4.2.14 断点、观察点和异常 90
4.3 简单实例 97
4.4 小结 101
第5章 开发工具GNU make 103
5.1 make简介 104
5.2 多文件项目 104
5.2.1 为什么分解项目 105
5.2.2 什么时候分解项目 105
5.2.3 如何分解项目 106
5.2.4 对于常见错误的注释 106
5.2.5 重新编译多文件项目 107
5.3 GNU make工具 108
5.3.1 基本makefile结构 108
5.3.2 编写make规则 109
5.3.3 makefile变量 109
5.3.5 假象目的 111
5.3.4 隐含规则 111
5.3.6 函数 112
5.3.7 makefile实例 112
5.4 GNU automake 113
5.4.1 开始之前 114
5.2.2 简单的例子 114
5.4.3 深入了解 116
5.4.4 通用性概念 116
5.4.5 实例软件包 119
5.4.6 编辑configure.in文件 134
5.4.7 编辑makefile.am文件 138
5.4.8 使用makefile 139
5.5 小结 140
第6章 gawk开发 141
6.1 gawk介绍 142
6.2.1 基本格式 143
6.2 初识gawk 143
6.2.2 执行方法 144
6.3 gawk脚本 144
6.3.1 gawk内部变量 144
6.3.2 分解输入 145
6.3.3 字段 146
6.3.4 将记录分解成字段 146
6.4 打印输出 147
6.4.1 print打印 147
6.4.2 输出分隔 148
6.4.3 printf打印 149
6.5 gawk模式 150
6.6 控制结构 152
6.7.1 数值方面的内部函数 154
6.7 内部函数 154
6.7.2 字符串方面的内部函数 155
6.7.3 输入输出的内部函数 156
6.8 自定义的函数 156
6.8.1 函数定义的格式 156
6.8.2 函数定义的例子 157
6.9 几个实例 157
6.10 小结 158
第7章 深入认识Linux系统 159
7.1 Linux系统 160
7.2 Linux系统内核 160
7.3 登录1ogin 161
7.3.1 init进程 161
7.3.2 登录过程 161
7.4.1 根文件系统 163
7.4 文件系统 163
7.4.2 /etc目录 164
7.4.3 /dev目录 165
7.4.4 /usr文件系统 165
7.4.5 /var文件系统 166
7.4.6 /proc文件系统 166
7.5 程序和进程 172
7.6 用户标识 172
7.7 信号 172
7.8 系统中的时间 174
7.8.1 硬件时钟和软件时钟 175
7.8.2 显示和设置时钟 175
7.8.3 时钟错误 176
7.9 系统调用 176
7.10 小结 177
第8章 文件和目录 179
8.1 文件和目录介绍 180
8.2 获取信息节点 180
8.3 文件类型 182
8.4 文件访问权限 183
8.5 access函数 184
8.6 umask函数 184
8.7 改变访问权限 185
8.8 改变所有者 185
8.9 Linux文件系统 186
8.10 链接、删除和重命名 186
8.11 符号链接 187
8.12 文件时间及utime函数 187
8.14 读取目录 188
8.13 创建和删除目录 188
8.15 目录操作函数 189
8.16 小结 189
第9章 Linux进程控制 191
9.1 产生子进程 192
9.2 程序分解 192
9.3 程序分解实例 192
9.3.1 fork实例一 192
9.3.2 fork实例二 193
9.3.3 fork实例三 194
9.3.4 fork实例四 196
9.4 线程 197
9.5 线程实例 198
9.7 Signals实例 199
9.6 信号 199
9.8 小结 202
第10章 多线程编程 203
10.1 多线程编程简介 204
10.1.1 线程基础 204
10.1.2 定义多线程术语 205
10.1.3 多进程程序的特点 205
10.2 多进程编程技巧 206
10.2.1 主要程序结构 206
10.2.2 选择主体分叉点 207
10.2.3 进程间关系处理 207
10.3 多线程的益处 210
10.4 多线程编程 213
10.4.1 线程函数库 213
10.4.2 创建线程 214
10.4.5 挂起或继续执行线程 215
10.4.4 放弃执行 215
10.4.3 获取线程号 215
10.4.6 向线程发信号 216
10.4.7 设置本线程的信号掩码 216
10.4.8 终止线程 217
10.4.9 等待线程结束 218
10.4.10 简单的例程 219
10.4.11 维护线程专有数据 219
10.4.12 高级特性 222
10.5 使用同步对象编程 227
10.5.1 互斥锁 227
10.5.2 条件变量 233
10.5.3 多读单写锁 238
10.5.4 信号量 242
10.5.5 进程间同步 245
10.5.6 同步原语的比较 247
10.6 编译和调试 247
10.6.1 编译多线程应用程序 247
10.6.2 调试多线程应用程序 248
10.7 编程指南 248
10.7.1 重新认识全局变量 249
10.7.2 静态局部变量 249
10.7.3 线程同步 250
10.7.4 避免死锁 251
10.7.5 基本注意事项 252
10.7.6 关于多处理器 254
10.8 常用多线程系统函数 257
11.1.1 用C语言创建管道 262
10.9 小结 280
第11章 Linux进程间通信 281
11.1 半双工管道 282
11.1.2 使用管道 286
11.1.3 原子操作 289
11.2 命名管道(FIFOs) 289
11.2.1 创建命名管道 289
11.2.2 操作命名管道 290
11.2.3 阻塞动作 291
11.2.4 SIGPIPE信号 292
11.3 进程间通信 292
11.3.1 IPC标识符 292
11.3.2 IPC键(key) 292
11.3.4 ipcrm命令 293
11.4 消息队列 293
11.3.3 ipcs命令 293
11.4.1 内部数据结构 294
11.4.2 消息队列的系统函数 296
11.4.3 msgtool的实例 302
11.5 信号 304
11.5.1 内部数据结构 304
11.5.2 信号系统函数 305
11.5.3 信号集实例 309
11.6 内存共享 313
11.7 小结 317
第12章 Linux网络编程基础 319
12.1 socket基本概念 320
12.2 端口和socket 321
12.3 socket程序设计 322
12.4 进程间通信 329
12.5 网络理论 329
12.6 小结 330