第1篇 基础篇 2
第1章 Linux简介 2
1.1 Linux系统概述 2
1.1.1 Linux的发展简史 2
1.1.2 Linux的组成 3
1.1.3 Linux的特性 4
1.1.4 Linux的应用领域 5
1.1.5 Linux的发行版本 6
1.2 Linux图形界面操作 7
1.2.1 系统登录、注销与关闭 7
1.2.2 系统管理 8
1.2.3 文件与目录操作 9
1.3 Linux字符界面操作 10
1.3.1 系统登录与退出 10
1.3.2 文件与目录操作 11
1.3.3 备份与压缩 20
1.3.4 基本网络操作 22
1.3.5 用户管理 23
1.3.6 系统管理及其他常用命令 24
1.4 Shell脚本编程基础 28
1.4.1 Shell脚本的创建过程 28
1.4.2 Shell中的特殊字符 29
1.4.3 Shell变量 31
1.4.4 条件测试 32
1.4.5 控制结构 34
1.4.6 Shell函数 38
1.5 常见面试题 39
1.6 小结 39
1.7 习题 40
第2章 C语言基础 41
2.1 C语言概述 41
2.1.1 发展历史与特点 41
2.1.2 程序的基本结构 42
2.1.3 程序的开发流程 42
2.2 数据类型、运算符和表达式 43
2.2.1 数据类型 43
2.2.2 运算符 45
2.2.3 表达式 48
2.3 基本语句 48
2.3.1 表达式语句 49
2.3.2 选择语句 49
2.3.3 循环语句 52
2.3.4 跳转语句 55
2.3.5 复合语句和空语句 57
2.4 数组 57
2.4.1 一维数组 57
2.4.2 二维数组和多维数组 59
2.4.3 字符数组与字符串 61
2.5 预处理 61
2.5.1 宏定义 61
2.5.2 文件包含 63
2.5.3 条件编译 64
2.6 常见面试题 65
2.7 小结 66
2.8 习题 66
第3章 指针、函数及自定义数据类型 67
3.1 指针 67
3.1.1 指针的基本概念 67
3.1.2 指针与数组的互操作 71
3.1.3 指针数组 74
3.2 函数 75
3.2.1 函数的定义与声明 75
3.2.2 函数的调用与参数传递 76
3.2.3 变量的作用域 78
3.2.4 变量的存储类型 79
3.2.5 外部函数和内部函数 81
3.2.6 函数的递归 82
3.2.7 函数指针 85
3.3 结构体、共用体和枚举 86
3.3.1 结构体 86
3.3.2 共用体 91
3.3.3 枚举 93
3.4 常见面试题 94
3.5 小结 95
3.6 习题 95
第4章 数据结构 96
4.1 线性表 96
4.1.1 顺序存储 96
4.1.2 链式存储 99
4.2 栈 106
4.3 队列 109
4.4 二叉树 113
4.4.1 二叉树的基本概念 113
4.4.2 二叉树的存储结构 114
4.4.3 二叉树的遍历 115
4.5 查找 117
4.5.1 顺序查找 117
4.5.2 二分查找 119
4.5.3 插值查找 122
4.6 排序 124
4.6.1 冒泡排序 124
4.6.2 插入排序 126
4.6.3 选择排序 128
4.6.4 快速排序 130
4.6.5 归并排序 132
4.7 常见面试题 135
4.8 小结 135
4.9 习题 135
第5章 文本编辑器 136
5.1 vi编辑器的基本使用 136
5.1.1 vi的启动 136
5.1.2 vi的工作模式 138
5.1.3 文件的保存和退出 139
5.1.4 光标移动 140
5.1.5 屏幕滚动 143
5.1.6 文本输入、删除与修改 145
5.1.7 复制与粘贴 148
5.1.8 查找与替换 150
5.1.9 其他功能 152
5.2 vi编辑器之程序编辑 153
5.2.1 程序中光标的跳转 153
5.2.2 程序编辑过程中的关键字补全 155
5.2.3 源代码的缩进 156
5.3 emacs编辑器的基本使用 157
5.3.1 emacs的启动与退出 157
5.3.2 文件打开与保存 158
5.3.3 光标移动与屏幕滚动 159
5.3.4 文本编辑 160
5.3.5 查找与替换 160
5.3.6 窗口功能 161
5.3.7 帮助功能 162
5.4 常见面试题 162
5.5 小结 162
5.6 习题 162
第6章 GCC编译器 163
6.1 GCC简介 163
6.2 GCC的安装 163
6.3 GCC常用选项 166
6.3.1 基本选项 166
6.3.2 警告选项 169
6.3.3 优化选项 172
6.3.4 连接器选项 173
6.3.5 其他选项 175
6.4 常见面试题 176
6.5 小结 177
6.6 习题 177
第7章 调试工具 178
7.1 GDB简介及安装 178
7.2 GDB常用命令 179
7.2.1 GDB基本命令 179
7.2.2 断点设置与管理 183
7.2.3 数据显示与变量赋值 186
7.2.4 程序执行与函数调用 189
7.2.5 其他常用命令 191
7.3 GDB调试实例 193
7.4 其他调试工具 196
7.5 常见面试题 198
7.6 小结 198
7.7 习题 198
第8章 多文件项目管理 199
8.1 GNU Make简介 199
8.2 Makefile文件书写规则 200
8.2.1 基本规则 200
8.2.2 变量的定义与使用 202
8.2.3 隐含规则 204
8.2.4 伪目标 205
8.2.5 函数 206
8.2.6 通用Makefile文件 207
8.3 GNU Automake简介 210
8.4 常见面试题 213
8.5 小结 214
8.6 习题 214
第9章 Linux C基本应用 215
9.1 字符串操作 215
9.1.1 字符测试 215
9.1.2 字符串初始化 217
9.1.3 字符串复制 218
9.1.4 字符串比较 220
9.1.5 字符/字符串查找 221
9.1.6 字符串连接与分割 223
9.2 数据转换 225
9.2.1 字母大小写转换 225
9.2.2 字符串转换 226
9.3 内存分配与释放 228
9.3.1 内存空间的分配 228
9.3.2 内存空间的释放 228
9.3.3 更改已分配的内存空间 229
9.4 时间和日期 230
9.4.1 时间和日期的获取 230
9.4.2 时间和日期的显示 231
9.4.3 时间的计算 233
9.5 其他应用 234
9.5.1 命令行参数分析 234
9.5.2 用户和用户组操作 237
9.5.3 环境变量操作 240
9.6 常见面试题 242
9.7 小结 243
9.8 习题 243
第2篇 应用篇 246
第10章 文件系统编程 246
10.1 Linux文件系统简介 246
10.2 文件的基本操作 247
10.2.1 创建/打开文件 247
10.2.2 关闭文件 251
10.2.3 读写文件 251
10.2.4 文件的其他操作 255
10.3 文件的属性 257
10.3.1 获取文件的属性 257
10.3.2 设置文件的属性 261
10.4 目录文件的操作 263
10.4.1 创建目录文件 263
10.4.2 打开/关闭目录文件 264
10.4.3 读取目录文件 264
10.4.4 获取/更改当前工作目录 266
10.5 常见面试题 267
10.6 小结 267
10.7 习题 267
第11章 标准输入输出 268
11.1 标准输入输出的基本操作 268
11.1.1 文件的打开 268
11.1.2 文件的关闭 269
11.1.3 缓冲区的刷新 270
11.1.4 缓冲区属性的设置 270
11.2 非格式化输入输出 271
11.2.1 单个字节输入输出 271
11.2.2 字符串输入输出 274
11.2.3 数据块输入输出 276
11.3 格式化输入输出 279
11.4 常见面试题 284
11.5 小结 285
11.6 习题 285
第12章 进程操作 286
12.1 进程的概念 286
12.1.1 进程的组成 286
12.1.2 进程状态的转化 287
12.2 Linux进程 288
12.2.1 进程的状态 289
12.2.2 进程调度信息 289
12.2.3 进程的标识符 290
12.2.4 进程间通信相关信息 290
12.2.5 进程链接信息 291
12.2.6 时间和定时器信息 291
12.2.7 文件系统信息 292
12.2.8 其他信息 292
12.3 进程创建与控制 293
12.3.1 fork函数 293
12.3.2 vfork函数和exec函数 297
12.3.3 system函数 300
12.3.4 popen函数 302
12.3.5 进程终止 303
12.3.6 获取进程信息 304
12.4 守护进程 306
12.4.1 守护进程的创建方法 307
12.4.2 守护进程的输出 310
12.5 常见面试题 311
12.6 小结 312
12.7 习题 312
第13章 进程间通信 313
13.1 管道 313
13.1.1 匿名管道 314
13.1.2 命名管道 317
13.2 信号 322
13.2.1 信号的基本原理 322
13.2.2 信号的类型 323
13.2.3 信号处理函数 324
13.2.4 信号发送函数 327
13.2.5 信号集和信号集操作函数 331
13.3 消息队列 333
13.3.1 消息队列的创建 333
13.3.2 消息队列的控制 334
13.3.3 消息队列的读写 336
13.4 信号量 340
13.4.1 信号量的创建 341
13.4.2 信号量的控制 342
13.4.3 信号量的操作 342
13.5 共享内存 345
13.5.1 共享内存的创建 345
13.5.2 共享内存的读写 347
13.6 常见面试题 350
13.7 小结 350
13.8 习题 350
第14章 多线程编程 351
14.1 线程的基本概念 351
14.1.1 多线程的意义 352
14.1.2 线程与进程的比较 352
14.1.3 多线程编程标准与线程库 353
14.1.4 Linux的线程机制 353
14.2 线程的基本操作 353
14.2.1 线程的创建 354
14.2.2 线程的合并 355
14.2.3 线程的终止 356
14.2.4 线程的属性 361
14.3 线程的同步 365
14.3.1 互斥量 365
14.3.2 条件变量 367
14.3.3 信号量 370
14.4 常见面试题 372
14.5 小结 372
14.6 习题 372
第15章 网络编程 373
15.1 网络基础知识 373
15.1.1 OSI参考模型 373
15.1.2 TCP/IP协议栈 374
15.2 套接字编程基础 375
15.2.1 套接字编程原理 376
15.2.2 创建套接字 377
15.2.3 绑定套接字 378
15.2.4 监听网络端口 379
15.2.5 接收连接请求 380
15.2.6 建立连接 380
15.2.7 面向连接的数据传输 380
15.2.8 无连接的数据传输 381
15.2.9 关闭套接字 382
15.2.10 应用实例 382
15.3 服务器模型 388
15.3.1 循环服务器 388
15.3.2 并发服务器 389
15.3.3 多路复用I/O并发服务器 392
15.4 域名系统 394
15.4.1 通过域名获取主机信息 394
15.4.2 通过地址获取主机信息 395
15.4.3 获取本地主机信息 395
15.5 常见面试题 396
15.6 小结 396
15.7 习题 397
第16章 Linux GUI编程 398
16.1 GTK+/Gnome开发简介 398
16.1.1 第一个GTK+应用程序 398
16.1.2 信号连接与回调函数 400
16.2 常用GTK+构件 403
16.2.1 构件定位 403
16.2.2 按钮构件 407
16.2.3 标签构件 409
16.2.4 文本及文本输入构件 411
16.2.5 进度条构件 416
16.2.6 组合框 420
16.2.7 对话框 423
16.3 GUI生成器Glade 428
16.3.1 打开Glade 429
16.3.2 创建应用程序界面 429
16.3.3 编译连接程序 434
16.4 常见面试题 435
16.5 小结 435
16.6 习题 436
第3篇 案例篇 438
第17章 案例1:Linux命令实现 438
17.1 功能与参数介绍 438
17.2 主函数代码分析 439
17.3 其他函数代码分析 447
17.4 小结 451
第18章 案例2:客户端/服务器端程序 452
18.1 服务器端程序设计 452
18.2 客户端程序设计 456
18.2.1 字符界面客户端程序 456
18.2.2 图形界面客户端程序 459
18.3 小结 465