第1章 linux概述 1
1.1 linux的发展 1
1.1.1 linux概念 1
1.1.2 linux和unix的渊源 1
1.1.3 与linux相关的协议和标准 3
1.2 linux的内核架构 4
1.2.1 linux操作系统结构 4
1.2.2 linux内核体系结构 5
1.2.3 内核版本和获取 6
1.2.4 内核源代码目录结构 7
1.3 linux的主要版本 9
1.3.1 linux版本介绍 9
1.3.2 ubuntu的首次使用 10
1.4 本章小结 15
习题 15
第2章 linux基本命令与应用 16
2.1 认识命令行 16
2.1.1 terminal 16
2.1.2 命令用法初体验 18
2.1.3 其他虚拟终端 20
2.1.4 相关概念 22
2.2 使用文本文件 24
2.2.1 创建文本文件 24
2.2.2 查看文本文件内容 27
2.2.3 查找及统计 28
2.3 目录和文件 30
2.3.1 目录及文件的基本操作 30
2.3.2 文件权限 35
2.4 管理用户和用户组 39
2.4.1 相关配置文件 39
2.4.2 相关操作 40
2.5 其他常见命令 42
2.5.1 挂载和卸载设备 42
2.5.2 安装和卸载软件 44
2.6 本章小结 45
习题 46
练习 46
第3章 从hello linux程序开始 47
3.1 hello linux 47
3.1.1 hello_linux的诞生 47
3.1.2 linux平台c语言编码风格 48
3.1.3 开发工具 49
3.2 gcc编译 52
3.2.1 单文件的编译 52
3.2.2 多个源文件的编译 55
3.2.3 其他介绍 56
3.3 gdb调试 57
3.3.1 gdb介绍 58
3.3.2 使用gdb调试c语言文件 59
3.4 本章小结 64
习题 64
练习 64
第4章 利用makefile管理一个工程 65
4.1 第一个makefile 65
4.1.1 利用make编译一个程序文件 65
4.1.2 利用make编译多个程序文件 66
4.2 makefile的基本概念与规则 68
4.2.1 makefile的基本概念 68
4.2.2 规则 69
4.3 本章小结 72
习题 72
练习 72
第5章 linux系统中的时间 73
5.1 时间表示 73
5.1.1 linux系统时间 73
5.1.2 linux应用程序时间函数 74
5.2 利用程序显示系统时间 76
5.2.1 常用时间函数 76
5.2.2 高级时间函数 78
5.3 时间的测量与计时 79
5.3.1 时间测量 79
5.3.2 计时器 80
5.4 本章小结 81
习题 81
练习 81
第6章 多进程程序开发 82
6.1 进程概念 82
6.2 进程的创建 83
6.3 连续调用多次fork函数 85
6.4 启动外部程序 86
6.5 本章小结 87
习题 87
练习 87
第7章 进程间通信 88
7.1 概述 88
7.2 管道通信 89
7.2.1 管道概述 89
7.2.2 无名管道 90
7.2.3 命名管道 94
7.3 套接字通信 99
7.3.1 用文件套接字实现本地进程通信 99
7.3.2 用网络套接字实现网络进程通信 103
7.4 本章小结 106
习题 106
练习 106
第8章 利用qt开发gui应用程序 107
8.1 qt及qt creator 107
8.1.1 qt简介 107
8.1.2 qt creator 108
8.1.3 qt的安装和启动 109
8.1.4 qt creator的界面组成 110
8.2 用qt creator完成一个gui项目 112
8.2.1 创建qt gui项目 112
8.2.2 程序的运行 115
8.3 信号和槽 116
8.3.1 信号和槽的概念 116
8.3.2 用信号-槽机制响应gui事件 116
8.3.3 关于信号-槽的进一步说明 117
8.4 qt设计师 118
8.4.1 简介 118
8.4.2 qt设计师的功能 119
8.5 本章小结 119
习题 120
练习 120
第9章 mysql数据库 121
9.1 安装mysql 121
9.2 mysql的基本用法 122
9.2.1 mysql管理 122
9.2.2 数据库操作 122
9.2.3 数据类型 124
9.2.4 表操作 125
9.2.5 创建一个数据库 127
9.3 使用c语言访问mysql数据库 129
9.3.1 连接数据库 129
9.3.2 执行sql语句 130
9.3.3 处理数据 135
9.4 本章小结 137
习题 137
练习 137
第10章 linux综合应用 138
10.1 概述 138
10.1.1 系统需求 138
10.1.2 本章内容结构 139
10.2 原型设计 139
10.2.1 添加资源文件 139
10.2.2 界面设计 139
10.2.3 界面布局 142
10.2.4 添加动作 142
10.3 系统设计 144
10.3.1 系统架构 145
10.3.2 客户端功能设计 145
10.3.3 服务器功能设计 145
10.4 系统实现 146
10.4.1 数据结构(通信协议) 146
10.4.2 客户端实现 146
10.4.3 服务器端实现 147
10.4.4 几点说明 148
10.5 linux应用综合实训 148
10.6 本章小结 149
第11章 构建linux内核系统 150
11.1 概述 150
11.2 内核初始化 151
11.3 内核配置 152
11.4 内核构建 153
11.5 本章小结 154
练习 154
第12章 添加最简单的linux内核模块 155
12.1 用户态与内核态 155
12.1.1 c/c++应用程序的运行机制 155
12.1.2 linux内核模块 156
12.2 添加最简单的linux内核模块 157
12.2.1 lkm代码框架 157
12.2.2 lkm编译 159
12.2.3 kello.c的编译、添加和删除 160
12.2.4 lkm与c应用程序的差异 161
12.3 printk和某些常见宏 162
12.3.1 实时显示内核模块运行信息 162
12.3.2 显示位置信息 163
12.4 本章小结 163
练习 163
第13章 基于proc的linux进程控制块信息读取 164
13.1 proc伪文件系统 164
13.1.1 proc中的文件 164
13.1.2 proc中文件的内容 165
13.1.3 proc伪文件系统介绍 167
13.2 linux中的进程控制块 168
13.2.1 linux进程控制块task_struct 169
13.2.2 进程重要信息解读 170
13.3 通过proc读取linux进程信息 172
13.3.1 创建proc文件 172
13.3.2 基于seq_file机制的proc文件操作 173
13.3.3 task_struct信息读取过程 176
13.3.4 tasklist内核模块编译和添加 178
13.3.5 tasklist内核模块工作流程 178
13.4 task_struct重要信息 180
13.4.1 linux进程调度策略 180
13.4.2 进程优先级 181
13.4.3 进程控制块中的其他信息 182
13.5 向proc文件写入数据 183
13.5.1 用户空间和内核空间之间传递数据 183
13.5.2 内核空间内存分配 183
13.5.3 proc文件的写操作函数 185
13.6 本章小结 185
习题 186
练习 186
第14章 posix多任务及同步机制 187
14.1 fork创建进程 187
14.1.1 fork创建进程的流程 187
14.1.2 fork/exec创建进程的流程 190
14.1.3 fork进阶问题 192
14.2 posix线程机制 194
14.2.1 posix概述 194
14.2.2 posix线程创建 195
14.3 posix多线程及同步机制 198
14.3.1 多个线程的资源竞争访问 198
14.3.2 posix同步机制 200
14.4 条件变量与生产者-消费者问题 202
14.4.1 同步与互斥 202
14.4.2 posix条件变量 203
14.4.3 条件变量在生产者-消费者问题中的应用 204
14.5 本章小结 206
习题 207
练习 208
第15章 用户态和内核态信号量 209
15.1 信号量与同步问题 209
15.1.1 信号量概述 209
15.1.2 同步问题 210
15.2 posix信号量 212
15.2.1 无名信号量 213
15.2.2 有名信号量 214
15.2.3 posix信号量用于线程同步问题 215
15.2.4 posix信号量用于进程间同步 218
15.2.5 linux中的信号量技术 223
15.3 内核信号量和内核线程 224
15.3.1 linux内核信号量 224
15.3.2 linux内核线程 224
15.3.3 内核信号量和线程的例子 226
15.3.4 linux内核同步技术 228
15.4 本章小结 229
习题 229
练习 229
第16章 基于共享内存的进程间通信 231
16.1 共享内存 231
16.2 共享内存映射文件 234
16.2.1 单个进程的内存映射文件 234
16.2.2 多个进程间的内存映射文件的同步 235
16.3 posix共享内存对象 237
16.4 本章小结 239
习题 239
练习 240
第17章 linux内存管理 241
17.1 linux物理内存管理机制 241
17.1.1 内存结点node 242
17.1.2 内存结点zone 242
17.1.3 物理页框page 243
17.2 ia32的寻址机制 244
17.2.1 ia32的段机制 244
17.2.2 ia32的页面映射机制 247
17.2.3 ia32中的控制寄存器以及pae、pse 248
17.3 ia32结构上的linux地址映射机制 250
17.3.1 linux中段地址映射机制 250
17.3.2 ia32 linux段地址映射实验 252
17.3.3 ia32 linux页地址映射 256
17.3.4 ia32 linux页地址映射实验 259
17.4 linux进程地址空间 263
17.4.1 linux中进程的虚拟地址空间 263
17.4.2 获取进程虚拟地址空间信息 267
17.4.3 linux中进程的虚拟存储区域vma 268
17.4.4 获取进程的虚拟内存区域信息 270
17.4.5 linux中进程、内存和文件的关系 272
17.5 本章小结 274
习题 275
练习 276
第18章 linux设备驱动程序 277
18.1 概述 277
18.1.1 设备管理基本概念 277
18.1.2 linux字符设备管理 279
18.2 字符设备cmos驱动程序 282
18.2.1 cmos rtc信息 282
18.2.2 获取cmos rtc信息的驱动程序内核模块 282
18.2.3 cmos rtc驱动程序内核模块测试 284
18.3 基于内存映射的杂项设备驱动程序 286
18.3.1 linux中的杂项设备 286
18.3.2 设备驱动中的内存映射 286
18.3.3 基于内存映射的杂项设备驱动程序 287
18.3.4 测试 289
18.4 本章小结 289
习题 290
练习 290
第19章 linux虚拟文件系统 292
19.1 概述 292
19.1.1 vfs在linux中的作用 293
19.1.2 vfs支持的文件系统类型 293
19.1.3 vfs的基本数据结构 294
19.2 vfs对象的操作 296
19.2.1 注册文件系统 296
19.2.2 文件系统装载 297
19.2.3 与进程相关的文件系统数据结构 298
19.2.4 从当前进程访问linux内核vfs文件系统 299
19.3 proc文件系统 300
19.3.1 主要数据结构 300
19.3.2 proc文件系统的操作 302
19.4 本章小结 303
习题 303
练习 303
参考文献 304