热门关键字:  听力密码  单词密码  新概念美语  巧用听写练听力  零起点

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
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册