Linux系统程序设计(修订版)

Linux系统程序设计(修订版) 教材名称: Linux系统程序设计(修订版)
ISBN号: 978-7-89436-461-6 作者: 王凯
字数: 499千字 规格: 16开
印制时间: 2016-08-01 出版日期: 2013-07-01
定价: 39.00 元 样章下载: 样章.pdf
购买地址:

1.适用对象
本教材适用于计算机相关专业本科Linux环境下程序设计相关课程的教学,可供本科高年级学生自学使用,也可以作为相关工程技术人员和计算机爱好者学习Linux系统编程的参考书。
 
2.具备的知识和能力基础
本教材需要读者理解操作系统原理,并具备C语言编程能力和Linux基本操作技能。
 
3.预期达到的学习效果
通过本教材的学习,希望使读者能了解Linux操作系统的基本组成和工作原理,掌握基于Linux系统的C语言编程方法,能熟练地基于Linux系统进行C/C++应用程序开发。
 
本教材主要讲解基于Linux平台的文件、进程、进程间通信相关的编程理论和方法,共分为12章。第1章介绍Linux操作系统的基本使用方法;第2章介绍Linux平台下进行C语言开发需要的各种工具;第3章介绍Linux平台下常用的编程基础知识;第4章到第6章介绍文件、文件属性、目录文件相关的编程理论和方法;第7章和第8章介绍进程和线程的编程方法;第9章到第11章介绍信号、管道、信号量、共享内存、消息队列、Socket六种进程间通信方式;第12章则是一个贯穿教材大多数知识点的综合项目。

 

第1章 Linux操作系统基础…………………………………………………………… 3
1.1 UNIX/Linux操作系统简介………………………………………………………… 3
1.1.1 UNIX发展历史…………………………………………………………… 3
1.1.2 UNIX体系结构…………………………………………………………… 4
1.1.3 Linux操作系统发展历史………………………………………………… 5
1.1.4 Linux的版本……………………………………………………………… 6
1.1.5 Linux操作系统特点……………………………………………………… 7
1.2 相关术语…………………………………………………………………………… 9
1.2.1 操作系统…………………………………………………………………… 9
1.2.2 多用户系统………………………………………………………………… 9
1.2.3 用户和组…………………………………………………………………… 9
1.2.4 进程………………………………………………………………………… 10
1.2.5 文件………………………………………………………………………… 10
1.2.6 硬链接和符号链接………………………………………………………… 10
1.2.7 文件类型…………………………………………………………………… 11
1.2.8 文件描述符与索引节点…………………………………………………… 11
1.3 库函数与系统调用………………………………………………………………… 11
1.4 Linux常用命令…………………………………………………………………… 12
1.4.1 用户和用户组……………………………………………………………… 12
1.4.2 文件和目录………………………………………………………………… 14
1.4.3 进程………………………………………………………………………… 16
1.4.4 获取帮助信息……………………………………………………………… 17
1.5 项目:SSH终端及登录…………………………………………………………… 19
1.5.1 项目分析及设计…………………………………………………………… 19
1.5.2 项目实施…………………………………………………………………… 20
1.5.3 项目运行…………………………………………………………………… 21
第2章 Linux平台项目开发环境…………………………………………………… 25
2.1 编辑器Vi ………………………………………………………………………… 25
2.1.1 Vi的工作模式…………………………………………………………… 26
2.1.2 Vi的基本用法…………………………………………………………… 27
2.1.3 Vi的高级用法…………………………………………………………… 27
2.2 编译器GCC ……………………………………………………………………… 29
2.2.1 GCC编译器介绍………………………………………………………… 29
2.2.2 GCC编译器基本用法…………………………………………………… 30
2.3 make及Makefile ………………………………………………………………… 33
2.3.1 Makefile …………………………………………………………………… 33
2.3.2 Makefile文件的命名……………………………………………………… 34
2.3.3 Makefile文件的调用……………………………………………………… 34
2.3.4 Makefile文件的内容……………………………………………………… 35
2.3.5 make命令的特殊用法…………………………………………………… 38
2.4 调试器GDB ……………………………………………………………………… 39
2.4.1 输出语句调试方法………………………………………………………… 39
2.4.2 GDB工具调试…………………………………………………………… 39
2.5 库…………………………………………………………………………………… 43
2.5.1 库的基本概念……………………………………………………………… 43
2.5.2 静态库和共享库的创建与使用…………………………………………… 44
2.6 项目:Linux系统C编程实践…………………………………………………… 46
2.6.1 项目分析及设计…………………………………………………………… 46
2.6.2 项目实施…………………………………………………………………… 47
2.6.3 项目编译及运行…………………………………………………………… 50
第3章 Linux程序设计初步…………………………………………………………… 52
3.1 程序及进程的存储结构…………………………………………………………… 52
3.2 变量的类型修饰符………………………………………………………………… 54
3.3 命令行参数………………………………………………………………………… 56
3.4 环境变量…………………………………………………………………………… 58
3.4.1 Shell变量………………………………………………………………… 58
3.4.2 环境变量访问命令………………………………………………………… 59
3.4.3 环境变量访问函数………………………………………………………… 60
3.5 时间管理…………………………………………………………………………… 62
3.6 错误代码…………………………………………………………………………… 65
3.7 标准I/O与文件I/O……………………………………………………………… 69
3.8 项目:设置环境变量……………………………………………………………… 70
3.8.1 项目设计…………………………………………………………………… 70
3.8.2 项目实施…………………………………………………………………… 71
3.8.3 项目编译与运行…………………………………………………………… 72
第4章 文件I/O ………………………………………………………………………… 74
4.1 文件系统简介……………………………………………………………………… 74
4.1.1 UNIX/Linux文件系统概述……………………………………………… 75
4.1.2 VFS虚拟文件系统………………………………………………………… 77
4.1.3 索引节点inode …………………………………………………………… 77
4.1.4 文件的类型………………………………………………………………… 78
4.1.5 文件的访问权限…………………………………………………………… 80
4.2 访问文件的内核数据结构………………………………………………………… 81
4.3 文件基本I/O操作………………………………………………………………… 83
4.3.1 打开/创建文件open/creat ……………………………………………… 83
4.3.2 读文件……………………………………………………………………… 87
4.3.3 写文件……………………………………………………………………… 88
4.3.4 文件定位…………………………………………………………………… 90
4.3.5 关闭文件…………………………………………………………………… 92
4.3.6 文件操作举例……………………………………………………………… 93
4.4 文件访问的同步…………………………………………………………………… 95
4.5 项目:文件复制命令的实现……………………………………………………… 96
4.5.1 项目分析与设计…………………………………………………………… 96
4.5.2 项目实施…………………………………………………………………… 98
4.5.3 项目编译与运行…………………………………………………………… 99
第5章 文件属性管理………………………………………………………………… 102
5.1 获取文件属性…………………………………………………………………… 102
5.2 用户/组ID与名字的转换……………………………………………………… 105
5.3 硬链接与符号链接……………………………………………………………… 107
5.3.1 硬链接与符号链接的区别……………………………………………… 107
5.3.2 相关的系统调用函数…………………………………………………… 108
5.4 dup/dup2 ………………………………………………………………………… 109
5.4.1 输入输出重定向………………………………………………………… 109
5.4.2 dup/dup2函数…………………………………………………………… 110
5.5 文件属性的修改………………………………………………………………… 113
5.5.1 修改文件属性…………………………………………………………… 113
5.5.2 改变文件属主及组chown/fchown/lchown …………………………… 114
5.5.3 改变文件访问权限chmod/fchmod …………………………………… 115
5.5.4 改变文件时间utime …………………………………………………… 115
5.5.5 改变文件长度truncate/ftruncate ……………………………………… 116
5.6 项目:显示文件长格式信息……………………………………………………… 116
5.6.1 项目分析与设计………………………………………………………… 116
5.6.2 项目实施………………………………………………………………… 117
5.6.3 项目编译与运行………………………………………………………… 120
第6章 目录文件管理………………………………………………………………… 123
6.1 目录基本操作…………………………………………………………………… 123
6.1.1 打开目录………………………………………………………………… 123
6.1.2 读目录…………………………………………………………………… 124
6.1.3 关闭目录………………………………………………………………… 125
6.2 目录其他操作…………………………………………………………………… 126
6.2.1 改变当前目录…………………………………………………………… 126
6.2.2 创建目录………………………………………………………………… 127
6.2.3 删除目录………………………………………………………………… 128
6.2.4 目录指针定位…………………………………………………………… 128
6.3 项目:显示指定目录下文件列表………………………………………………… 129
6.3.1 项目分析与设计………………………………………………………… 129
6.3.2 项目实施………………………………………………………………… 129
6.3.3 项目编译与运行………………………………………………………… 134
第7章 进程控制………………………………………………………………………… 136
7.1 什么是Shell……………………………………………………………………… 136
7.1.1 用户登录Shell…………………………………………………………… 136
7.1.2 Shell执行命令…………………………………………………………… 137
7.2 进程基本概念…………………………………………………………………… 138
7.2.1 进程标识(ProcessID) ………………………………………………… 138
7.2.2 用户标识………………………………………………………………… 139
7.3 进程控制相关函数……………………………………………………………… 141
7.3.1 创建进程………………………………………………………………… 141
7.3.2 exec*函数……………………………………………………………… 150
7.3.3 进程终止………………………………………………………………… 154
7.3.4 等待进程结束…………………………………………………………… 155
7.3.5 system函数……………………………………………………………… 162
7.4 项目:实现简单的Shell ………………………………………………………… 164
7.4.1 项目分析与设计………………………………………………………… 164
7.4.2 项目实施………………………………………………………………… 165
7.4.3 项目编译与运行………………………………………………………… 167
第8章 线 程…………………………………………………………………………… 169
8.1 线程概念………………………………………………………………………… 169
8.2 线程基本操作…………………………………………………………………… 170
8.3 线程间通信……………………………………………………………………… 175
8.4 项目:线程实例…………………………………………………………………… 179
8.4.1 项目分析与设计………………………………………………………… 179
8.4.2 项目实施………………………………………………………………… 180
8.4.3 项目编译与运行………………………………………………………… 182
第9章 信号与管道…………………………………………………………………… 186
9.1 信号……………………………………………………………………………… 186
9.1.1 信号的概念……………………………………………………………… 186
9.1.2 信号的产生……………………………………………………………… 187
9.1.3 信号的响应方式………………………………………………………… 192
9.1.4 sleep和pause …………………………………………………………… 194
9.1.5 信号集…………………………………………………………………… 197
9.2 管道……………………………………………………………………………… 207
9.2.1 管道基本概念…………………………………………………………… 207
9.2.2 FIFO ……………………………………………………………………… 214
第10章 进程间通信(IPC)…………………………………………………………… 218
10.1 System VIPC介绍…………………………………………………………… 218
10.2 System V信号量……………………………………………………………… 220
10.3 System V共享内存…………………………………………………………… 226
10.4 System V消息队列…………………………………………………………… 231
第11章 网络编程……………………………………………………………………… 239
11.1 网络编程基本概念……………………………………………………………… 239
11.1.1 常用网络相关命令和配置文件………………………………………… 239
11.1.2 软件体系结构…………………………………………………………… 243
11.1.3 网络协议及OSI参考模型……………………………………………… 245
11.1.4 IP地址和端口………………………………………………………… 248
11.1.5 字节顺序………………………………………………………………… 250
11.1.6 网络数据传输方式……………………………………………………… 253
11.2 套接字编程基础………………………………………………………………… 254
11.2.1 套接字简介……………………………………………………………… 254
11.2.2 套接字地址结构………………………………………………………… 255
11.2.3 面向连接套接字通信过程……………………………………………… 257
11.2.4 面向无连接套接字通信过程…………………………………………… 258
11.3 套接字编程相关函数…………………………………………………………… 259
11.3.1 socket …………………………………………………………………… 259
11.3.2 bind……………………………………………………………………… 260
11.3.3 listen …………………………………………………………………… 261
11.3.4 accept …………………………………………………………………… 261
11.3.5 connect ………………………………………………………………… 262
11.3.6 send……………………………………………………………………… 263
11.3.7 recv ……………………………………………………………………… 263
1.3.8 close …………………………………………………………………… 264
11.3.9 sendto…………………………………………………………………… 264
11.3.10 recvfrom ……………………………………………………………… 265
11.4 项目:基于网络的进程间通信………………………………………………… 266
11.4.1 项目分析与设计………………………………………………………… 266
11.4.2 项目实施………………………………………………………………… 267
11.4.3 项目运行………………………………………………………………… 269
11.5 基于UDP的网络编程………………………………………………………… 272
11.6 域名解析………………………………………………………………………… 276
11.6.1 域名概述………………………………………………………………… 276
11.6.2 IP地址形式转换……………………………………………………… 278
11.6.3 IP地址与主机名……………………………………………………… 280
第12章 Linux网络传输系统………………………………………………………… 286
12.1 项目构思………………………………………………………………………… 286
12.2 项目设计………………………………………………………………………… 287
12.3 项目实施………………………………………………………………………… 289
12.4 项目运行………………………………………………………………………… 294
附录A Linux主要的系统调用……………………………………………………… 297
附录B 标准……………………………………………………………………………… 304
附录C ASCII码………………………………………………………………………… 307
附录D 学习知识要点及能力要点…………………………………………………… 309
参考文献…………………………………………………………………………………… 315

 

本教材以一个“Linux网络传输系统”项目为例,以项目为核心将知识与技能有机地结合在一起,介绍了Linux系统开发的相关知识以及完成该项目工程的技能。另外本教材中设置了【基本知识】【知识验证】【创新能力】等环节,将知识和技能清晰地展示出来。
【基本知识】主要介绍Linux系统程序设计的核心工程基础知识;
【知识验证】主要是在学习了基本知识之后,对基本知识的验证;
【创新能力】主要是在基本知识学习的基础上进行进一步的思考。