第一篇 系统环境 2
第1章Linux系统概述 2
1.1计算机操作系统简介 2
1.1.1操作系统的概念 2
1.1.2操作系统的基本功能 2
1.1.3主要操作系统简介 3
1.2 Linux操作系统介绍 4
1.2.1 Linux的来源 4
1.2.2什么是Linux 5
1.2.3 Linux的特性及优点 7
1.2.4为什么要选择Linux 8
1.2.5内核的组成 8
1.3主流Linux操作系统及发行版本 9
1.3.1 Linux内核的版本 10
1.3.2 Linux的发行版本 10
1.4小结 10
1.5习题 10
1.6上机实训 11
第2章shell环境 12
2.1shell介绍 12
2.1.1 shell的种类 12
2.1.2如何进入shell 13
2.1.3如何使用shell 15
2.2 shell编程基础 16
2.2.1创建和运行shell脚本程序 16
2.2.2 shell环境变量 16
2.2.3常用的shell命令 18
2.2.4管道与重定向的使用 20
2.2.5 shell变量的使用 21
2.2.6 shell运算符的应用 22
2.2.7在shell脚本中进行条件控制 24
2.2.8在shell脚本中使用for循环 25
2.2.9在shell脚本中使用while循环 27
2.2.10在shell脚本中使用until循环 28
2.2.11在shell脚本中使用函数 28
2.3综合实例 29
2.3.1实例需求 29
2.3.2系统设计 29
2.3.3程序代码 30
2.4小结 34
2.5习题 34
2.6上机实训 35
第二篇C语言及编程环境 38
第3章C语言简介 38
3.1 C语言概述 38
3.1.1 C语言的发展简史 38
3.1.2 C语言的特点 39
3.2 C语言的组成元素 39
3.2.1字符集 39
3.2.2标识符 40
3.2.3关键字 40
3.2.4常量的类型 41
3.2.5变量的类型 41
3.2.6变量的存储类型 42
3.2.7变量的作用域 44
3.2.8运算符 44
3.2.9注释方法 46
3.3语句与控制结构 46
3.3.1表达式语句 46
3.3.2复合语句 46
3.3.3函数调用语句 46
3.3.4控制语句 47
3.4函数与程序结构 51
3.4.1库函数 51
3.4.2用户自定义函数 51
3.5数组 52
3.5.1一维数组的定义和使用 52
3.5.2多维数组的定义和使用 53
3.6结构 55
3.6.1结构的定义 55
3.6.2结构成员的引用 56
3.7指针 56
3.7.1指针的概念 57
3.7.2指针的定义和使用 57
3.7.3指针变量的运算 57
3.8综合实例 58
3.8.1冒泡排序算法原理 58
3.8.2冒泡排序算法实现 59
3.9小结 61
3.10习题 62
3.11上机实训 62
第4章vi编辑器 65
4.1 vi编辑器概述 65
4.1.1 vi的启动 65
4.1.2 vi的操作方式 65
4.1.3 vi编辑器的功能键 67
4.1.4退出vi编辑器 68
4.2 vi编辑器的命令 68
4.2.1光标移动命令 68
4.2.2滚动屏幕命令 69
4.2.3文本编辑命令 69
4.2.4文本删除命令 69
4.2.5文本修改命令 70
4.2.6文本移动命令 70
4.2.7搜索命令 71
4.2.8 ex转义命令 71
4.3 vi编辑器的选项 72
4.3.1选项的含义 72
4.3.2选项的设置方式 73
4.4小结 74
4.5习题 74
4.6上机实训 75
第5章gcc编译器 76
5.1编译过程简述 76
5.1.1预编译过程 76
5.1.2编译的过程 78
5.1.3优化及汇编的过程 79
5.2链接过程简述 79
5.2.1链接的过程 80
5.2.2静态链接与动态链接 80
5.3 gcc编译器简述 81
5.3.1程序的编译与链接 81
5.3.2 gcc编译器的工作过程 81
5.4 gcc编译器语法 82
5.4.1常用语法 82
5.4.2用gcc编译器生成可执行文件 83
5.4.3用gcc编译器生成动态链接库 83
5.4.4如何使用动态链接 85
5.4.5 gcc编译器常见错误排除 85
5.5小结 86
5.6习题 86
5.7上机实训 86
第6章make的使用 88
6.1 makefiile简介 88
6.2 makefiile的书写规则 89
6.2.1基本语法规则 89
6.2.2定义变量 89
6.2.3环境变量 90
6.2.4通配符的使用 90
6.2.5使用条件判断 91
6.2.6在makefile中使用函数 92
6.2.7使用make与直接使用gcc脚本 的区别 93
6.3 make工具 93
6.3.1运行make命令 93
6.3.2 make命令的工作过程 94
6.3.3在makefiile中使用伪目标 94
6.3.4 make命令的返回值 95
6.4综合实例 95
6.4.1 makefiile应用的环境 95
6.4.2 makefiile的实现及解释 95
6.5小结 96
6.6习题 96
6.7上机实训 97
第7章 程序调试 98
7.1错误处理 98
7.1.1使用标准错误输出 98
7.1.2使用ermo全局变量 99
7.1.3使用错误信号处理 100
7.1.4使用assert断言 101
7.1.5内存泄露的检查 102
7.1.6其他可能的内存错误 104
7.2 gdb介绍 105
7.2.1利用gdb调试的前提 105
7.2.2启动gdb的方法 105
7.2.3 gdb的基本功能 105
7.3使用gdb进行调试实例 108
7.4小结 109
7.5习题 109
7.6上机实训 109
第8章 创建与使用库 111
8.1函数库介绍 111
8.1.1系统函数库的使用 111
8.1.2用户自定义函数库的创建和使用 112
8.2库函数与系统调用 114
8.2.1系统调用介绍 115
8.2.2库函数介绍 116
8.3动态库的创建与使用 117
8.4综合实例 120
8.5小结 121
8.6习题 122
8.7上机实训 122
第三篇 输入输出及进程管理 126
第9章 文件操作 126
9.1 Linux文件系统简述 126
9.1.1逻辑磁盘分区管理 126
9.1.2文件系统的建立与挂载 127
9.1.3虚拟文件系统 131
9.1.4 ext2文件系统 131
9.1.5文件类型 133
9.1.6文件权限管理 134
9.2文件基本操作 139
9.2.1文件编程的基本概念 140
9.2.2文件的创建与打开 141
9.2.3文件的读写 146
9.2.4文件的关闭与删除 148
9.2.5文件的随机存取 151
9.3文件安全编程 153
9.3.1文件的属主和用户组编程 153
9.3.2设置文件权限(UGO模式) 155
9.3.3设置文件权限(ACL模式) 158
9.4文件属性编程 162
9.5目录编程 166
9.6综合实例 170
9.6.1ELF文件格式 171
9.6.2程序实现 171
9.7小结 175
9.8习题 176
9.9上机实训 176
第10章 标准输入输出库 178
10.1标准IO的基本概念 178
10.1.1流 178
10.1.2缓存 179
10.1.3标准输入、标准输出和标准 错误输出 181
10.2使用标准I/O进行文件操作 183
10.2.1打开关闭流文件 183
10.2.2单字符方式读写 184
10.2.3行方式读写 185
10.2.4二进制方式读写 187
10.2.5格式化输入输出 189
10.2.6在流文件中定位 192
10.3综合实例 193
10.4小结 197
10.5习题 197
10.6上机实训 197
第11章 界面程序设计——Qt 204
11.1 Qt简述 204
11.1.1 Qt的组成 204
11.1.2 Qt的优点 204
11.2 Qt开发包的安装 205
11.3 Qt集成开发环境介绍 206
11.3.1启动设计器 206
11.3.2设计器界面元素介绍 206
11.4 Qt程序开发 207
11.4.1建立新项目 208
11.4.2设计窗口 208
11.4.3添加事件处理 209
11.4.4添加主程序 210
11.5 Qt程序的生成 212
11.6小结 213
11.7习题 213
11.8上机实训 213
第12章 界面程序设计——GTK+ 219
12.1 GNOME与KDE 219
12.1.1 Linux图形界面原理 219
12.1.2 X协议 220
12.1.3 GNOME与KDE的启动 220
12.1.4 GNOME与KDE的区别 221
12.2使用GTK+进行开发 221
12.2.1GTK+的安装 221
12.2.2 GTK+程序的初始化与退出 222
12.2.3 GTK+的事件处理 222
12.2.4使用GTK+实现HelloWorld 223
12.2.5编译GTK+程序 225
12.2.6在GTK+中使用控件 225
12.3综合实例 226
12.3.1实例需求 227
12.3.2实例代码及解释 227
12.4小结 228
12.5习题 229
12.6上机实训 229
第13章 进程 233
13.1进程的基本概念 233
13.1.1进程的属性 233
13.1.2进程的内存映像 236
13.1.3进程组 236
13.1.4进程的会话 238
13.1.5进程的控制终端 240
13.1.6进程的状态 241
13.1.7进程的优先级 242
13.2进程的运行环境 245
13.2.1进程的入口函数 245
13.2.2进程的环境变量 250
13.2.3进程的内存分配 252
13.3进程的创建 254
13.3.1调用fork创建进程 254
13.3.2调用exec系列函数执行程序 256
13.3.3调用system创建进程 259
13.4进程的终止 260
13.4.1调用exit退出进程 260
13.4.2调用wait等待进程退出 260
13.5小结 263
13.6习题 263
13.7上机实训 263
第14章 信号 266
14.1信号的基本概念 266
14.1.1信号的定义 266
14.1.2信号的来源 267
14.1.3信号的分类 267
14.2信号的安装及处理 269
14.2.1信号的处理方式 269
14.2.2用signal安装信号 270
14.2.3用sigaction安装信号 271
14.2.4信号的阻塞处理 274
14.2.5信号集的操作 277
14.2.6未决信号的处理 277
14.2.7等待信号 279
14.2.8信号处理函数的实现 281
14.3信号的发送 283
14.3.1使用kill发送信号 283
14.3.2使用sigqueue发送信号 284
14.4 SIGALRM信号 285
14.4.1安装SIGALRM信号 285
14.4.2设置定时器 286
14.5 SIGCLD信号 287
14.5.1子进程的退出过程 287
14.5.2 SIGCLD信号的处理 288
14.6小结 290
14.7习题 290
14.8上机实训 290
第四篇 进程间通信(IPC)及网络编程 294
第15章 进程间通信——管道 294
15.1进程间通信概念 294
15.2管道的概念及分类 295
15.2.1管道的概念及特点 295
15.2.2管道的分类 296
15.3管道编程 296
15.3.1创建管道 296
15.3.2读写管道 299
15.3.3关闭管道 301
15.3.4管道I/O 301
15.4命名管道编程 303
15.4.1创建管道 303
15.4.2打开管道及读写 305
15.4.3管道的删除 307
15.5小结 307
15.6习题 307
15.7上机实训 307
第16章 进程间通信——消息队列 309
16.1 System V进程间通信概述 309
16.1.1 Shell环境控制IPC 309
16.1.2进程间通信关键字 311
16.1.3进程间通信标识符 311
16.1.4 IPC权限许可结构 312
16.2消息队列基本概念 313
16.2.1队列 313
16.2.2消息 313
16.2.3消息队列 314
16.3消息队列编程 315
16.3.1键值生成函数 315
16.3.2创建消息队列 316
16.3.3消息发送 319
16.3.4消息接收 322
16.3.5控制消息队列 323
16.4小结 326
16.5习题 326
16.6上机实训 326
第17章 进程间通信——共享内存 330
17.1共享内存基本概念 330
17.1.1共享内存编程模型 330
17.1.2共享内存的映射 331
17.1.3共享内存数据结构 331
17.2共享内存编程 332
17.2.1创建共享内存 332
17.2.2映射共享内存 334
17.2.3删除共享内存映射 336
17.2.4控制共享内存 336
17.3小结 339
17.4习题 339
17.5上机实训 339
第18章 进程间通信——信号量 342
18.1 PV操作原理 342
18.1.1 PV操作的来源 342
18.1.2 PV操作的定义 343
18.1.3 PV操作的应用 344
18.2信号量基本概念 346
18.2.1 Linux信号量简介 346
18.2.2信号量的控制结构 347
18.3信号量编程 347
18.3.1创建信号量 347
18.3.2信号量操作 349
18.3.3信号量控制 353
18.4综合实例——利用信号量实现 生产者-消费者模型 356
18.4.1需求 356
18.4.2需求分析与设计 356
18.4.3实现代码及分析 357
18.5小结 360
18.6习题 360
18.7上机实训 360
第19章Linux网络环境 362
19.1计算机网络基础 362
19.1.1计算机网络分类 362
19.1.2网络拓扑结构 363
19.1.3网络通信协议 364
19.1.4 OSI参考模型 365
19.2 TCP/IP协议概述 367
19.2.1 TCP/IP分层模型 367
19.2.2 TCP/IP协议族 368
19.2.3网络地址 369
19.2.4端口 371
19.3客户机/服务器模型 372
19.4传输控制协议 374
19.4.1连接建立 374
19.4.2连接关闭 374
19.4.3 TCP数据报格式 376
19.5用户数据报协议 377
19.6小结 377
19.7习题 378
19.8上机实训 378
第20章 基本套接字编程 381
20.1套接字编程简述 381
20.1.1半相关与全相关 381
20.1.2地址族与协议族 382
20.1.3面向连接与面向无连接 382
20.1.4套接字类型 383
20.1.5字节序 383
20.1.6套接字连接方式 385
20.1.7数据传输方式 385
20.2套接字数据结构 386
20.2.1套接字地址结构 387
20.2.2通用套接字地址结构 387
20.2.3主机名称数据结构 388
20.2.4服务名称数据结构 390
20.2.5通用数据收发结构 391
20.3基本套接字函数 392
20.3.1字节操作函数 392
20.3.2字节序操作函数 395
20.3.3地址转换函数 395
20.3.4套接字函数 398
20.4套接字选项 415
20.4.1套接字选项函数 415
20.4.2 SO_KEEPALIVE选项 416
20.4.3 SO_LINGER选项 417
20.4.4 SO_RCVBUF和SO_SNDBUF 选项 419
20.4.5 SO_RCVTIMEO和 SO_SNDTIMEO选项 420
20.4.6 SO_REUSEADDR和 SO_REUSEPORI选项 421
20.5 TCP套接字编程 421
20.5.1重复服务器编程 421
20.5.2并发服务器编程 422
20.6 UDP套接字编程 427
20.6.1 UDP编程模型 428
20.6.2 UDP客户/服务器编程 428
20.7小结 431
20.8习题 432
20.9上机实训 432
第21章 综合实例——银行代理收费 服务器 436
21.1程序需求 436
21.2程序实现 437
21.3小结 451
附录1常见面试题 452
附录2 Linux下常见C函数字母索引 470