新書推薦:
《
500万次倾听:陪伤心的人聊聊
》
售價:HK$
53.8
《
英国商业500年(见证大国崛起与企业兴衰,启迪未来商业智慧。)
》
售價:HK$
80.6
《
万千心理·儿童心理治疗中的心智化:临床实践指导
》
售價:HK$
87.4
《
自我囚禁的人:完美主义的心理成因与自我松绑(破除你对完美主义的迷思,尝试打破自我评价过低与焦虑的恶性循环)
》
售價:HK$
66.1
《
周易
》
售價:HK$
44.6
《
东南亚的传统与发展
》
售價:HK$
67.2
《
乾隆制造
》
售價:HK$
87.4
《
资治通鉴臣光曰辑存 资治通鉴目录(司马光全集)(全二册)
》
售價:HK$
304.4
|
編輯推薦: |
◆ Linux基本操作,Linux Shell编程
◆ 使用GCC、常用Linux函数库、Linux C程序排错、make
◆ UNIX IO、内核文件IO数据结构、文件组织与物理结构
◆ 进程控制原理,信号机制,基于fork、exec、exit、wait函数编写多进程并发程序
◆ 线程管理,利用Pthreads线程库编写多线程并发应用
◆ 基于信号量与PV操作解决同步及互斥问题,经典同步问题
◆ 进程同步,利用管道和IPC通信设施编写进程间同步应用
◆ 套接字、Web、HTTP协议,网络通信程序结构,并发网络应用编程
|
內容簡介: |
《Linux编程》全面讲述Linux环境下基于C语言的系统编程技术以及相关的理论原理,主要内容包括Linux基本操作、Shell编程、系统IO编程、文件系统、进程控制原理、多进程并发编程、信号机制、线程概念、多线程并发编程、同步与互斥的概念、基于信号量与PV操作解决同步及互斥问题、经典同步问题、网络编程、并发网络应用编程等,《Linux编程》安排有大量的程序实例、课后作业,还设计了很多示意图,以帮助读者理解、运用书中介绍的概念、原理和技术。 《Linux编程》内容丰富、结构合理、思路清晰、语言简明流畅、示例翔实,可作为高等院校计算机类专业操作系统、Linux编程等课程的教材,还可作为C程序设计、嵌入式开发的参考资料。 《Linux编程》的电子课件、习题答案和实例源代码可以到http:www.tupwk.com.cndownpage网站下载。
|
目錄:
|
目 录
第1章 Linux系统文件操作 1
1.1 UNIXLinux操作系统简介 1
1.1.1 UNIX简介 1
1.1.2 Linux概述 2
1.2 Linux系统目录结构 3
1.3 Linux系统的安装、启动、登录、
用户界面与命令格式 5
1.3.1 在VMware中用快照快速安装
Linux虚拟机系统 5
1.3.2 启动与登录Linux 5
1.3.3 三种系统操作界面 6
1.3.4 Linux命令格式和说明 7
1.4 Linux文件、目录操作及文件
属性、权限 9
1.4.1 目录路径与目录操作 9
1.4.2 文件属性与权限 13
1.4.3 Linux文件操作命令 14
1.4.4 修改文件属性 19
1.4.5 使用通配符*和?匹配
文件名 21
1.4.6 文件的压缩与打包 22
1.5 输入输出重定向和管道 23
1.6 本章小结 24
课后作业 25
第2章 Linux Shell编程 26
2.1 Shell编程基本概念 26
2.1.1 Shell脚本程序的结构 27
2.1.2 Shell脚本的创建与执行方法 27
2.1.3 Shell变量与赋值表达式 28
2.1.4 Shell输入输出语句 29
2.1.5 终止脚本执行和终止状态 29
2.2 Shell数学运算与字符串处理 32
2.2.1 Shell数学运算 32
2.2.2 Shell字符串处理 32
2.3 Shell条件与if控制结构 33
2.3.1 if语句 34
2.3.2 test命令 36
*2.3.3 复合条件检查 39
2.3.4 case语句 40
2.4 循环结构 40
2.4.1 for循环结构 41
2.4.2 while循环结构 42
2.4.3 until循环结构 43
2.5 Linux全局变量和环境变量 44
2.5.1 Linux Shell层次结构 44
2.5.2 Shell全局变量与局部变量 45
2.5.3 Linux环境变量 46
*2.5.4 Shell变量的删除和只读设置
方法 48
2.5.5 Shell数组的定义和使用方法 48
2.6 Linux文件IO、IO重定向和管道 49
2.6.1 标准文件描述符 49
2.6.2 IO重定向 50
2.6.3 管道 51
2.6.4 从文件获取输入 52
2.7 命令行参数 52
*2.8 Shell函数 53
*2.8.1 函数的基本用法 53
*2.8.2 向函数传递参数 54
2.9 本章小结 54
课后作业 55
第3章 Linux C编程环境 57
3.1 Linux C程序的编译与执行 57
3.1.1 Linux环境下C程序的编译与
执行过程 57
3.1.2 编译多个源文件 61
3.1.3 使用头文件和库文件 62
*3.1.4 使用gcc创建自定义库文件 65
3.1.5 gcc常用命令选项及用法 67
3.2 Linux常用自带系统库 68
3.2.1 数学函数 68
3.2.2 环境控制函数 69
3.2.3 字符串处理函数 69
3.2.4 时间函数 70
3.2.5 数据结构算法函数 71
3.3 诊断和处理Linux编程错误 75
3.3.1 诊断和处理编译错误 75
3.3.2 处理系统调用失败 80
3.3.3 用断言检查程序状态错误 84
*3.4 用GDBddd调试器诊断运行
错误 85
*3.4.1 用GDB调试程序运行错误的
实例 85
*3.4.2 常用GDB命令 88
*3.4.3 用dddGDB调试程序 89
3.5 命令行参数和环境变量的
读取方法 90
3.5.1 环境变量及其使用方法 90
3.5.2 命令行参数的使用方法 91
*3.6 make工具 92
*3.6.1 引入make工具的原因 92
*3.6.2 用makefile描述源文件间的
依赖关系 93
*3.6.3 引入伪目标以增强makefile功能 94
*3.6.4 用变量优化makefile文件 95
3.6.5 用预定义变量和隐含规则
简化makefile文件 96
3.7 本章小结 97
课后作业 98
第4章 输入输出与文件系统 101
4.1 文件系统层次结构 101
4.1.1 文件系统层次结构简介 101
4.1.2 文件IO库函数 102
4.2 系统IO概念与文件操作编程 103
4.2.1 UNIX IO 103
4.2.2 文件打开和关闭函数 104
4.2.3 文件读写编程与读写性能
改进方法 107
4.2.4 文件定位与文件内容随机读取 111
4.2.5 任意类型数据的文件读写 113
4.2.6 用文件读写函数操作设备 115
4.3 内核文件IO数据结构及应用 117
4.3.1 文件描述符和标准输入输出 117
4.3.2 文件打开过程 118
4.3.3 内核文件IO数据结构共享原理 119
4.3.4 dup和IO重定向 120
*4.4 用RIO包增强UNIX IO功能 124
*4.4.1 RIO的无缓冲的输入输出函数 124
*4.4.2 RIO带缓冲的输入函数 125
4.5 文件组织 128
4.5.1 文件属性、目录项与目录 128
4.5.2 逻辑地址与物理地址 129
4.5.3 创建和读写文件 130
4.5.4 一体化文件目录和分解目录 132
4.5.5 Linux分解式目录管理 133
4.5.6 读取文件元数据 135
4.5.7 文件搜索和当前目录 136
4.6 文件物理结构 137
4.6.1 外存组织方式 137
4.6.2 管理磁盘空闲盘块 141
4.6.3 文件系统结构格式 143
4.7 本章小结 144
课后作业 144
第5章 进程管理与控制 151
5.1 逻辑控制流和并发流 151
5.2 进程的基本概念 153
5.2.1 进程概念、结构与描述 153
5.2.2 进程的基本状态及状态转换 155
5.2.3 对进程PCB进行组织 156
5.2.4 进程实例 157
5.2.5 操作进程的工具 158
5.2.6 编程读取进程属性 160
*5.2.7 进程权限和文件特殊权限位 161
5.3 进程控制 163
5.3.1 创建进程 163
5.3.2 多进程并发特征与执行流程
分析 170
5.3.3 进程的终止与回收 173
5.3.4 让进程休眠 177
5.3.5 加载并运行程序 178
5.3.6 fork和exec函数的应用实例 180
*5.3.7 非本地跳转 184
5.3.8 进程与程序的区别 186
5.4 信号机制 186
5.4.1 信号概念 186
5.4.2 信号术语 188
5.4.3 发送信号的过程 188
5.4.4 接收信号的过程 191
*5.4.5 信号处理问题 193
*5.4.6 可移植信号处理 197
*5.4.7 信号处理引起的竞争 198
*5.5 守护进程 201
5.6 进程、内核与系统调用间的
关系 203
5.7 本章小结 204
课后作业 205
第6章 线程控制与同步互斥 211
6.1 线程概念 211
6.1.1 什么是线程 211
6.1.2 线程执行模型 212
6.1.3 多线程应用 213
6.1.4 第一个线程 213
6.2 多线程并发特征与编程方法 215
6.2.1 Pthreads线程API 215
6.2.2 多线程并发特征 217
6.2.3 线程间数据传递 219
6.3 多线程程序中的共享变量 221
6.3.1 进程的用户地址空间结构 222
6.3.2 变量类型和运行实例 223
6.3.3 共享变量的识别 223
6.4 线程同步与互斥 224
6.4.1 变量共享带来的同步错误 224
6.4.2 临界资源、临界区、进程线程
互斥问题 229
6.4.3 用信号量与PV操作保证临界区
互斥执行 230
6.4.4 用信号量及PV操作解决资源
调度问题 233
6.4.5 用Pthreads同步机制实现线程的
互斥与同步 237
6.4.6 共享变量的类型与同步编程小结 242
6.5 经典同步问题 242
6.5.1 生产者消费者问题 243
6.5.2 读者写者问题 245
*6.6 其他同步机制 246
*6.6.1 AND型信号量 246
*6.6.2 信号量集 247
*6.6.3 条件变量 248
*6.6.4 管程 250
*6.7 多线程并发的其他问题 251
*6.7.1 线程安全 251
*6.7.2 可重入性 253
*6.7.3 线程不安全库函数 254
*6.7.4 线程竞争 254
6.8 使用多线程提高并行性 257
6.8.1 顺序程序、并发程序和并行
程序 257
6.8.2 并行程序应用示例 258
6.8.3 使用线程管理多个并发活动 262
6.9 本章小结 264
课后作业 265
第7章 进程间通信 273
7.1 管道通信 273
7.1.1 什么是管道 273
7.1.2 命名管道FIFO及应用编程 274
*7.1.3 利用FIFO传输任意类型数据 277
7.1.4 无名管道PIPE及应用 278
7.1.5 使用PIPE实现管道命令 281
*7.1.6 使用FIFO的客户端服务器
应用程序 283
7.2 消息队列 286
7.2.1 消息队列的结构 286
7.2.2 消息队列函数 287
7.2.3 消息队列通信示例 289
7.2.4 通过消息队列传输任意类型的
数据 292
7.3 共享内存 294
7.3.1 基于共享内存进行通信的基本
原理 294
7.3.2 共享内存相关API函数 295
7.3.3 共享内存通信验证 296
7.3.4 共享内存通信示例 299
7.4 用IPC信号量实施进程同步 302
7.4.1 IPC信号量集结构体及操作函数 302
7.4.2 IPC用信号量集创建自定义PV
操作函数库 304
7.5 本章小结 305
课后作业 306
第8章 网络编程 308
8.1 客户端服务器编程模型 308
8.2 网络通信结构和Internet连接 309
8.2.1 网络通信结构 309
8.2.2 Internet连接 310
8.3 套接字地址与设置方法 311
8.3.1 IP地址和字节序 311
8.3.2 Internet域名 313
8.3.3 套接字地址结构 316
8.4 套接字接口与TCP通信编程
方法 316
8.4.1 socket函数 317
8.4.2 connect函数 317
8.4.3 open_client_sock函数 318
8.4.4 bind函数 319
8.4.5 listen函数 319
8.4.6 open_listen_sock函数 319
8.4.7 accept函数 320
8.4.8 sendrecv函数 321
8.5 网络通信应用示例toggle 321
8.6 Web编程基础 324
8.6.1 Web基础 324
8.6.2 Web内容 325
8.6.3 HTTP事务 326
8.7 小型Web服务器: weblet.c 328
8.7.1 weblet的主程序 328
8.7.2 HTTP事务处理 329
8.7.3 生成错误提示页面 331
8.7.4 HTTP额外请求报头的读取 332
8.7.5 URI解析 332
8.7.6 服务静态内容 333
8.7.7 测试静态网页功能 334
8.7.8 服务动态内容 335
8.7.9 实现CGI程序 336
8.7.10 测试动态网页功能 337
8.7.11 关于Web服务器的其他问题 339
8.8 本章小结 339
课后作业 340
第9章 并发网络通信编程实例 341
9.1 基于多进程的并发编程 341
*9.2 基于IO多路复用的并发编程 344
*9.2.1 利用IO多路复用等待多种IO事件 345
*9.2.2 基于IO多路复用实现事件驱动
服务器 346
9.3 基于线程的并发编程 350
9.3.1 基于线程的并发toggle服务器 350
9.3.2 基于预线程化的并发服务器 351
9.4 本章小结 354
课后作业 354
参考文献 356
|
內容試閱:
|
前 言
Linux是一种性能稳定的多用户网络操作系统,它与UNIX系统有相似的文件结构、用户接口和操作方式。Linux虽然是开源免费的操作系统,但它继承了UNIX系统强大的功能、卓越的性能和稳定性。学习Linux系统编程不仅能帮助学生更好地巩固和理解操作系统的工作原理,还能培养学生的实践技能。因此,很多高校选择Linux系统作为操作系统原理课程的实例系统,选用Linux系统编程项目作为操作系统原理课程的实验内容。
由于Linux系统编程本身就是一门难度较大、内容繁多的课程,从中选取一些项目来开设操作系统实验,存在以下一些问题:①Linux系统本身涉及很多理论、概念、技术、算法,操作系统这门课一般仅有十多个实验学时,由于学时太少,学生很难较好地掌握Linux系统编程技术,教学效果不佳;②目前很难找到将Linux系统编程技术与操作系统理论很好地融合的教材,结果是学习操作系统理论对学习Linux系统编程帮助不是很大,学习Linux系统编程对理解操作系统的理论帮助作用也非常有限;③一般基于Linux的实验指导或实验教材都写得比较简略,对Linux系统中多进程并发、线程编程、IO操作的介绍不完整、不系统,也没有补充必要的C语言语法知识,导致学生在学习过程中遇到很多难以克服的困难,丧失学习兴趣和信心。
《Linux编程》内容丰富、结构合理、思路清晰、语言简练流畅、示例翔实。每一章的引言部分概述了该章的作用和内容。在每一章的正文中,结合所讲述的关键技术和难点,穿插了大量极富实用价值的示例,并安排了有针对性的思考和练习,以帮助读者理解相关概念。每一章的末尾都安排了丰富的课后作业,有助于培养读者的分析能力和实际应用能力。
《Linux编程》的目的是培养学生关于计算机系统的知识和能力,对操作系统和Linux系统编程进行整合,以Linux系统编程为主线,并纳入操作系统原理课程中的进程管理、信号量与PV操作、文件系统等部分内容,将理论和实践有机地融合起来,可作为独立的操作系统实验或Linux系统编程课程开设,通过实践更好地理解课程理论,以提高教学质量。
作 者
2018年7月
|
|