Linux体系与编程——基于Linux 0.01版本
-
【作 者】主编 卢军 曾茂城
【I S B N 】978-7-5084-7373-4
【责任编辑】张玉玲
【适用读者群】本专通用
【出版时间】2010-04-01
【开 本】16开
【装帧信息】平装(光膜)
【版 次】第1版第1次印刷
【页 数】336
【千字数】540
【印 张】21
【定 价】¥35
【丛 书】21世纪软件工程师规化教材
【备注信息】
简介
本书特色
前言
章节列表
精彩阅读
下载资源
相关图书
本书针对Linux编程体系,从Linux的应用开始到Linux的内核分析,由浅入深地进行诠释。全书分为Linux应用、Linux编程、Linux内核分析、实验四篇共21章,内容丰富、循序渐进、通俗易懂、实用性强。本书在Linux内核分析的基础上增加了具有较高实用价值的Linux应用和Linux编程,读者可以通过书中大量的实例,由浅入深地理解Linux的应用技术和程序设计思想。本书把重心放在Linux内核分析上,让读者能够更清晰地理解Linux内核源码。书中精选的Linux 0.01内核是最简单、最精致的Linux内核,可以帮助读者快速掌握Linux内核设计原理,特别适合Linux的初学者阅读。
本书可让初学者在领略Linux实用性的同时,快速地跨入Linux程序员的门槛。本书既可作为Linux初学者的最佳入门教材,也可作为Linux程序员深入理解Linux编程体系的参考书,同时还可供计算机爱好者、软件工程师学习、分析Linux内核使用。
1.取材广泛,内容丰富
案例包括Linux下的一般应用、Linux下的C语言编程、Linux 0.01内核源码分析的各种相关实例。
2.案例完整,结构清晰
案例及代码实现由浅入深、循序渐进。从Linux应用到Linux编程,再到Linux 0.01版本内核源码分析,由浅入深地诠释了Linux体系与编程。
3.讲解通俗,步骤详细
案例的开发步骤均以通俗易懂的语言阐述,并穿插丰富的说明图片和表格。案例源码配有详尽的注释,便于读者理解核心代码的功能和逻辑意义。
随着Linux的不断发展与成熟,越来越多的用户使用Linux作为服务器操作系统和桌面操作系统。掌握基于Linux环境的应用开发和程序设计技术,已经成为计算机软件开发人员、信息系统建设人员的必备技能。
书中具有实用价值的Linux应用和Linux编程的相关知识,可以让读者循序渐进、由浅入深地理解Linux的应用、编程和内核基本原理与技术,具有很强的实用性。
组织结构
本书从Linux应用、Linux编程、Linux内核分析三方面由浅入深地详细介绍Linux编程体系,包括Linux的安装及常用操作、LAMP的安装配置、基于shell的备份实例、Linux编程环境的安装配置、Linux体系编程所涉及的各种常用知识(文件操作、进程、多线程、网络编程等)及Linux内核分析。每章后面都附有相应的理论巩固题或上机实践题,从而帮助读者复习、巩固所学知识,以培养读者的实际编程能力。
此外,为满足教学的实际需要,本书还给出了内核实验、进程间通信、文件系统等7个实验指导。这些实验在实际教学中都具有很强的实用价值,可以帮助读者深入理解Linux,构建基于Linux的高性能应用系统。
书中所用到的函数都是标准函数,可以在Linux系统上运行,所有实例程序都已在Linux中调试通过。
本书特点
作为一本针对基于Linux或其他UNIX风格环境编程的实用技术读物,本书在内容和目录编排上精心组织,能使读者快速掌握Linux编程体系的内容,以便在以后的程序开发中可以快速地、有针对性地查阅相关知识。
书中的每个知识点都是以简短的篇幅介绍其中最基本、最常用的内容。通过精心设计的一些编程实例,介绍程序设计的基本方法。在激发读者对Linux编程兴趣的同时,让读者在不知不觉中理解Linux编程体系所涉及的大多数常用知识。最后以Linux内核分析结尾,向读者介绍世界上最优秀的操作系统内核的同时,让读者进一步了解Linux编程体系。
概括来讲,本书具有如下特点:
取材广泛、内容丰富
案例完整、结构清晰
讲解通俗、步骤详细
代码准确、注释清晰
另外,“提示”中所列的均为读者容易产生混淆的内容或是对实际操作有帮助的一些经验性的方法和技巧。
读者对象
高等院校相关专业学生
高等职业技术院校相关专业学生
计算机培训教师和学员
计算机爱好者和相关技术人员
Linux程序员
编者与致谢
本书由卢军、曾茂城主编,荣智涛主审。全书内容与结构由卢军规划、统稿。第一篇由高昌健编写,第二篇由曾茂城、周辉、陶武文编写,第三篇由卢军、曾茂城编写。另外参加本书部分内容编写的还有王治国、冯强、曾德惠、许庆华、程亮、周聪、黄志平、胡松、邢永峰、邵军、边海龙、刘达因、赵婷、马鸿娟、侯桐、赵光明、李胜、李辉、侯杰、王红研、王磊、闫守红、康涌泉、蒋杼倩、王小东、张森、张正亮、宋利梅、何群芬、程瑶。
本书的出版得到了成都信息工程学院的资助,在此表示诚挚的谢意。
配套服务
由于作者水平所限,加之移动计算技术发展迅速、本书覆盖面广,书中错误和不妥之处在所难免,恳请广大读者批评指正。
为充分体现本书的特点,帮助读者深刻理解本书编写意图和内涵,进一步提高对本书教学的使用效率,欢迎读者将使用本书过程中发现的问题及各种探讨、建议反馈给我们,编者将竭诚为您服务。我们的E-mail:china_54@tom.com。
编者
2010年元月
第一篇 Linux应用及基础
第1章 Linux应用简介 1
1.1 Linux简介 1
1.2 虚拟化软件VirtualBox 2
1.3 CentOS的安装 3
1.4 Linux企业级的一般应用 14
1.4.1 为什么选择Linux 15
1.4.2 文件服务器 15
1.4.3 企业门户网站 16
1.4.4 数据备份 17
本章小结 17
习题一 17
第2章 Linux基本命令详解 18
2.1 命令之路 18
2.2 来自系统的援助——man 18
2.3 目录与文件操作 20
2.3.1 目录浏览与管理 20
2.3.2 文件操作 23
2.4 查找命令与正则表达式 26
2.4.1 grep 26
2.4.2 正则表达式 27
2.4.3 find 30
2.5 有用的小命令以及重定向 32
2.5.1 文本处理 32
2.5.2 date & time 34
2.5.3 重定向 36
2.6 系统管理命令 37
2.6.1 进程管理 38
2.6.2 用户管理 41
2.6.3 权限管理 44
2.7 实用工具与任务管理 46
2.7.1 压缩文件 46
2.7.2 uname 47
2.7.3 容量查看 47
2.7.4 任务管理 48
本章小结 51
习题二 51
第3章 LAMP的基本安装与配置 53
3.1 安装前的注意事项 53
3.2 Apache 53
3.2.1 Apache的安装 54
3.2.2 Apache的配置 54
3.3 MySQL 54
3.3.1 MySQL的安装 55
3.3.2 MySQL的配置 56
3.4 PHP 57
3.4.1 PHP的安装 57
3.4.2 PHP的配置 58
3.5 安装测试 58
本章小结 59
习题三 59
第4章 远程定期自动增量备份 60
4.1 shell脚本的基本语法 60
4.2 数据备份简介 61
4.2.1 数据备份设备 61
4.2.2 数据备份方案 61
4.3 远程定期自动增量备份 62
4.3.1 定期功能——crontab 62
4.3.2 增量功能——find 62
4.3.3 压缩功能——tar 63
4.3.4 远程备份——ftp 63
4.3.5 远程定期自动增量备份综合实例 64
本章小结 64
习题四 65
第二篇 Linux程序设计
第5章 Linux编程基础 66
5.1 Vim编辑器 67
5.1.1 使用Vim建立一个名为example.txt的文件 68
5.1.2 进入编辑模式 68
5.1.3 按Esc键返回一般模式 69
5.1.4 退出和存盘 69
5.2 GCC编译器 71
5.2.1 GCC简介 71
5.2.2 第一个Linux下的C程序 73
5.3 GDB调试器 74
5.3.1 GDB简介 74
5.3.2 GDB实例 74
5.4 make 76
5.4.1 Makefile文件 76
5.4.2 make使用实例 76
本章小结 77
习题五 78
第6章 文件和目录 79
6.1 Linux/UNIX的文件结构 79
6.1.1 文件和目录 79
6.1.2 文件和设备 80
6.2 系统调用和设备驱动程序 81
6.3 库函数 81
6.4 文件I/O 82
6.4.1 open函数 82
6.4.2 访问权限的初始化值 83
6.4.3 write函数 83
6.4.4 read函数 84
6.4.5 close函数 84
6.4.6 ioctl函数 85
6.4.7 其他系统调用函数 86
6.5 标准I/O库 87
6.5.1 fopen、freopen和fdopen函数 88
6.5.2 fread函数 89
6.5.3 fwrite函数 89
6.5.4 fclose函数 89
6.5.5 fflush函数 89
6.5.6 fseek函数 90
6.5.7 fgetc、getc和getchar函数 90
6.5.8 fputc、putc和putchar函数 90
6.5.9 fgets、gets函数 90
6.6 格式化输入和输出 91
6.6.1 printf、fprintf和sprintf函数 91
6.6.2 scanf、fscanf和sscanf函数 92
6.6.3 其他流函数 92
6.6.4 文件流错误处理 92
6.7 文件和目录的维护 93
6.7.1 chmod系统调用函数 93
6.7.2 chown系统调用函数 93
6.7.3 unlink系统调用函数 93
6.7.4 mkdir和rmdir系统调用函数 94
6.7.5 chdir系统调用和getcwd函数 94
本章小结 94
习题六 95
第7章 进程控制 96
7.1 Linux进程概述 96
7.1.1 进程简介 96
7.1.2 进程标识 97
7.2 创建进程 97
7.2.1 fork函数 98
7.2.2 vfork函数 100
7.3 终止进程 100
7.4 等待进程 101
7.4.1 wait函数 101
7.4.2 waitpid函数 103
7.5 exec函数 104
7.6 system函数 107
7.7 综合实例 108
本章小结 109
习题七 109
第8章 进程间通信 110
8.1 管道 110
8.1.1 什么是管道 110
8.1.2 popen和pclose函数 112
8.1.3 命名管道FIFO 114
8.2 信号量 118
8.2.1 什么是信号量 118
8.2.2 信号量的相关函数 119
8.2.3 信号量实例 121
8.3 消息队列 124
8.3.1 消息队列 124
8.3.2 消息队列的相关函数 125
8.3.3 消息队列实例 127
本章小结 130
习题八 130
第9章 多线程 132
9.1 什么是线程 132
9.1.1 线程的特点 132
9.1.2 线程的分类 133
9.2 线程编程基础 133
9.2.1 创建线程函数 135
9.2.2 等待线程结束的函数 135
9.2.3 取自己线程ID函数 135
9.2.4 终止线程函数 136
9.3 线程属性 136
9.4 线程访问控制 138
本章小结 144
习题九 144
第10章 Linux网络编程 146
10.1 计算机网络简介 146
10.1.1 IP地址 146
10.1.2 端口 146
10.1.3 域名 146
10.1.4 TCP/IP体系模型 147
10.1.5 C/S模型 147
10.2 套接字简介 148
10.2.1 套接字的概念 148
10.2.2 套接字的分类 148
10.2.3 套接字相关的数据类型 149
10.3 涉及套接字的网络编程 149
10.3.1 面向连接的TCP模型 150
10.3.2 无连接的UDP模型 157
本章小结 162
习题十 162
第11章 Linux综合编程——微博服务器设计简介 163
11.1 有状态和无状态的TCP通信 163
11.2 服务器设计的方案与思路 164
11.2.1 服务器设计涉及的数据结构 164
11.2.2 服务器的实现 167
本章小结 181
习题十一 181
第三篇 Linux 0.01内核分析
第12章 Linux和GNU简介 182
12.1 自由的天地:GNU和Linux 182
12.1.1 热爱和享受自由 183
12.1.2 神奇的Linux 184
12.2 在乐趣中获得成功:一起来玩操作系统 186
12.2.1 十一岁开始编程序 187
12.2.2 一种操作系统的诞生 187
12.3 GNU的开发工具 188
本章小结 189
习题十二 189
第13章 操作系统设计入门 190
13.1 操作系统介绍 190
13.2 操作系统的基本功能 191
13.3 操作系统设计的基本准则 191
13.3.1 简单就是优美 191
13.3.2 利用已有的基础 192
13.3.3 良好的设计 192
13.3.4 单内核操作系统和微内核操作系统 192
本章小结 193
习题十三 193
第14章 Linux 0.01内核 194
14.1 Linux 0.01内核简介 194
14.1.1 Linux 0.01内核背景 194
14.1.2 Linux 0.01的技术特色 195
14.1.3 存储管理 196
14.1.4 文件系统 196
14.1.5 硬件平台移植和应用程序 196
14.2 Linux 0.01核心代码目录 197
14.3 核心源代码的目录分布 197
14.3.1 boot目录 198
14.3.2 fs目录 199
14.3.3 include目录 199
14.3.4 init目录 200
14.3.5 kernel目录 201
14.3.6 lib目录 202
14.3.7 mm目录 202
14.3.8 tools目录 202
14.4 Linux 0.01的main.c分析 203
14.5 编译和运行Linux 0.01系统 206
本章小结 207
习题十四 207
第15章 操作系统引导——装载内核 208
15.1 操作系统引导基本知识 208
15.1.1 系统引导设备 208
15.1.2 启动过程简介 208
15.1.3 硬盘主引导扇区简介 210
15.2 Linux 0.01引导代码分析 212
15.2.1 boot.s:BIOS引导代码 212
15.2.2 head.s:Linux的32位引导代码 212
15.3 实例:使用nasm生成引导代码 212
15.3.1 引导代码基础 213
15.3.2 最简单的引导程序 213
15.3.3 如何设置段寄存器 215
15.3.4 在引导程序中装入程序(基于扇区) 215
本章小结 219
习题十五 219
第16章 进程管理和调度 220
16.1 进程的概念 220
16.1.1 进程的定义 220
16.1.2 进程的属性 220
16.2 进程调度 222
16.2.1 进程调度算法的选择 222
16.2.2 进程描述符 222
16.2.3 Linux进程调度源代码分析 223
16.2.4 进程的切换 223
16.3 Linux 0.01内核中的进程调度实例 224
16.3.1 进程调度 224
16.3.2 用户进程和内核线程 225
本章小结 227
习题十六 227
第17章 存储管理和设计 228
17.1 存储管理概述 228
17.1.1 信息的二级存储 228
17.1.2 存储管理的功能 229
17.2 段页式存储管理 230
17.2.1 页式存储管理 230
17.2.2 段式存储管理 231
17.2.3 段页式存储管理 232
17.2.4 3种存储管理方式的对比 232
17.3 物理存储管理 233
17.3.1 技术细节 233
17.3.2 物理存储管理器的组织 234
17.3.3 物理存储管理器的初始化 236
17.3.4 页面分配 237
17.3.5 页面回收 237
17.3.6 映射 237
17.3.7 内存映射 239
17.4 虚拟存储管理 239
17.4.1 技术细节 240
17.4.2 malloc()和free() 240
17.4.3 缺页处理 241
17.4.4 虚拟存储管理的页面分配 242
17.4.5 可执行程序 243
17.4.6 交换 243
17.4.7 总结 244
17.5 malloc()和free()的实现 244
17.6 Linux 0.01存储管理代码分析 245
17.6.1 memory.c分析 245
17.6.2 page.s分析 245
本章小结 246
习题十七 246
第18章 设备管理和调度 247
18.1 Linux设备管理概述 247
18.1.1 设备管理的基本要求 247
18.1.2 驱动程序 248
18.2 Linux 0.01中断处理 249
18.2.1 中断处理的基本过程 249
18.2.2 traps.c文件分析 250
18.2.3 /kernel/asm.s文件分析 250
18.3 如何编写中断服务程序ISR 250
18.4 设备驱动程序实例——利用BIOS
的探测系统设备 252
18.5 Linux 0.01设备驱动程序源代码分析 253
18.5.1 终端控制代码:console.c 253
18.5.2 rs323驱动代码:serial.c和rs_io.s 253
本章小结 253
习题十八 254
第19章 磁盘文件系统 255
19.1 硬盘驱动器结构简介 255
19.1.1 硬盘参数解释 255
19.1.2 基本Int 13H调用简介 256
19.1.3 扩展 Int 13H 简介 256
19.2 UNIX文件系统分析 256
19.3 VFS简介 257
19.3.1 VFS的体系结构 258
19.3.2 文件的表示 259
19.3.3 磁盘布局 260
19.4 文件系统设计步骤 260
19.4.1 步骤一:磁盘函数库 261
19.4.2 步骤二:文件系统 261
19.4.3 步骤三:容错性 263
19.5 实践:自己编写的简单文件系统 263
19.6 Linux 0.01文件系统源代码分析 264
本章小结 265
习题十九 265
第20章 shell编程技术和实例 266
20.1 shell的基本概念 266
20.2 例子:最简单的shell程序 268
20.3 管道和I/O重定向 272
20.3.1 使用dup()重定向I/O 272
20.3.2 使用pipe()和dup() 273
20.3.3 使用dup2()的例子 274
20.4 t-shell实现代码分析 276
20.4.1 shell总体结构(不支持管道) 276
20.4.2 shell总体结构(支持管道) 277
20.4.3 main函数 277
20.4.4 initialization()函数 278
20.4.5 getline()函数 279
20.4.6 parse()函数 279
20.4.7 command()函数 281
20.4.8 execute()函数 282
20.4.9 forkexec()函数 284
20.4.10 check()函数 286
20.4.11 getname()函数 286
20.4.12 t-shell的运行效果 287
本章小结 287
习题二十 288
第21章 Linux 0.01系统调用的实现 289
21.1 Linux系统调用概述 289
21.1.1 系统调用 289
21.1.2 系统调用实现 290
21.1.3 系统调用到int 0x80中断请求的转换 295
21.2 Linux 0.01系统调用实现分析 296
21.2.1 system_call.s 296
21.2.2 sys.c 296
21.3 实例:在Linux中添加新系统调用 296
21.3.1 实现系统调用代码 296
21.3.2 连接新的系统调用 297
21.3.3 重新编译Linux 0.01的内核 297
本章小结 298
习题二十一 298
第四篇 实验
实验一 Linux系统的安装 299
实验二 shell编程 300
实验三 进程间通信 301
实验四 文件系统 302
实验五 设备管理 303
实验六 进程调度 305
实验七 内存管理 306
附录 部分习题参考答案 307
参考文献 324
- Linux服务器构建与运维管理从基础到实战(基于CentOS 8实现) [阮晓龙 冯顺磊 董凯伦 于冠军]
- Linux服务器配置与管理项目教程(微课版) [赵良涛 姜猛 肖川 杨云]
- Linux操作系统配置与管理项目化教程 [主编 白玉羚 刘金明 王鹏]
- Linux服务器配置与安全管理 [李贺华 李腾]
- Linux操作系统基础及实验指导教程 [主编 黄卫东 张岳 史士英]
- Linux服务器配置与管理 [唐宏 杨智勇]
- 嵌入式Linux开发技术基础 [主编 伍德雁]
- Linux网络服务与Shell脚本攻略 [主编 肖睿 江骏]
- Linux系统管理 [主编 肖睿]
- Linux基础及应用教程(第二版) [主编 梁建武]
- Linux系统与应用 [刘兰青 王飞]
- Linux服务器配置与管理实训教程 [伍技祥]
- Linux网络服务器配置管理项目实训教程(第二版) [杨云 运永顺 和乾]
- Linux操作系统的应用与管理项目化教程 [邹承俊 周洪林]
- Linux操作系统配置与管理 [严学军 鲁 立]
- Linux/Android开发利器——ARM DS-5使用指南 [崔更申 秦兴国]
- Linux网络服务器配置管理项目实训教程 [杨云 马立新 杨建新 编著]
- Linux操作系统应用与安全 [李贺华 主编]
- Linux基础及应用教程实验指导与实训 [郭迎 梁建武 等主编]
- Linux实用教程 [刘兵 吴煜煌 等编著]
- 操作系统原理及应用(Linux) [王红 主编]
- 操作系统实训(Linux)--习题解答、例题解析、实验指导 [王红 主编]
- Linux/UNIX网络编程 [甘刚 主编]
- Red Hat Enterprise Linux 5基础教程 [王路群 主编]
- 操作系统原理及应用(Linux)(第二版) [王红 主编]
- 操作系统实训(Linux)--习题解答、例题解析、实验指导(第二版) [王红 主编]
- Linux基础及应用教程 [陈英 梁建武主编]