图书介绍

Unix/Linux编程实践教程2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

Unix/Linux编程实践教程
  • (美)Bruce Molay著;杨宗源,黄海涛译 著
  • 出版社: 北京:清华大学出版社
  • ISBN:7302096139
  • 出版时间:2004
  • 标注页数:495页
  • 文件大小:47MB
  • 文件页数:515页
  • 主题词:UNIX操作系统-程序设计-高等学校-教材;Linux操作系统-程序设计-高等学校-教材

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Unix/Linux编程实践教程PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

1.1 介绍1

1.2 什么是系统编程1

1.2.1简单的程序模型1

第1章 Unix系统编程概述1

1.2.2系统模型2

1.2.3操作系统的职责3

1.2.4为程序提供服务4

1.3理解系统编程4

1.3.1 系统资源4

1.3.2 目标:理解系统编程5

1.3.3方法:通过三个问题来理解5

1.4.2登录-运行程序-注销6

1.4从用户的角度来理解Unix6

1.4.1 Unix能做些什么6

1.4.3 目录操作8

1.4.4文件操作10

1.5从系统的角度来看Unix12

1.5.1用户和程序之间的连接方式12

1.5.2 网络桥牌12

1.5.3 bc:Unix的计算器13

1.5.4从bc/dc到Web16

1.6动手实践16

1.7.3 Unix的发展历程23

1.7.2 Unix的概要图23

1.7.1接下来的工作步骤23

1.7工作步骤与概要图23

小结24

第2章 用户、文件操作与联机帮助:编写who命令25

2.1介绍25

2.2关于命令who26

2.3 问题1:who命令能做些什么27

2.4问题2:who命令是如何工作的28

2.5 问题3:如何编写who32

2.5.1 问题:如何从文件中读取数据结构33

2.5.2 答案:使用open、read和close34

2.5.3 编写who1.c36

2.5.4 显示登录信息37

2.5.5 编写who2.c39

2.5.6 回顾与展望44

2.6 编写cp(读和写)44

2.6.1 问题1:cp命令能做些什么44

2.6.2问题2:cp命令是如何创建/重写文件的44

2.6.3问题3:如何编写cp45

2.6.4 Unix编程看起来好像很简单47

2.7提高文件I/O效率的方法:使用缓冲48

2.7.1缓冲区的大小对性能的影响48

2.7.2为什么系统调用需要很多时间48

2.7.3低效率的who2.c49

2.7.4在who2.c中运用缓冲技术50

2.8内核缓冲技术53

2.9文件读写54

2.9.1注销过程:做了些什么54

2.9.2注销过程:如何工作的54

2.9.3改变文件的当前位置55

2.9.4编写终端注销的代码57

2.10处理系统调用中的错误58

小结59

3.2问题1:ls命令能做什么63

3.2.1 1s可以列出文件名和文件的属性63

3.1介绍63

第3章 目录与文件属性:编写Is63

3.2.2列出指定目录或文件的信息64

3.2.3经常用到的命令行选项65

3.2.4问题1的答案65

3.3文件树65

3.4问题2:ls是如何工作的66

3.4.1什么是目录66

3.4.2是否可以用open、read和close来操作目录66

3.4.3如何读目录的内容67

3.5问题3:如何编写ls69

3.6编写ls-l71

3.6.1 问题1:ls-l能做些什么71

3.6.3用stat得到文件信息72

3.6.2问题2:ls-l是如何工作的72

3.6.4 stat提供的其他信息74

3.6.5如何实现75

3.6.6将模式字段转换成字符75

3.6.7将用户/组ID转换成字符串79

3.6.8 编写ls2.c81

3.7三个特殊的位86

3.7.1 set-user-ID位86

3.7.2 set-group-ID位87

3.7.3 sticky位87

3.7.4用ls-1看到的特殊属性87

3.9.1文件类型88

3.9设置和修改文件的属性88

3.8 ls小结88

3.9.2许可位与特殊属性位89

3.9.3文件的链接数90

3.9.4文件所有者与组90

3.9.5文件大小91

3.9.6 时间91

3.9.7文件名91

小结92

第4章 文件系统:编写pwd96

4.1介绍96

4.2.3文件操作命令97

4.2.2 目录命令97

4.2.1 目录和文件97

4.2从用户的角度看文件系统97

4.2.4针对目录树的命令99

4.2.5 目录树的深度几乎没有限制99

4.2.6 Unix文件系统小结100

4.3 Unix文件系统的内部结构100

4.3.1第一层抽象:从磁盘到分区100

4.3.2第二层抽象:从磁盘到块序列100

4.3.3第三层抽象:从块序列到三个区域的划分100

4.3.4文件系统的实现:创建一个文件的过程101

4.3.5文件系统的实现:目录的工作过程102

4.3.6文件系统的实现:cat命令的工作原理104

4.3.7 i-节点和大文件105

4.3.8 Unix文件系统的改进106

4.4理解目录107

4.4.1理解目录结构107

4.4.2与目录树相关的命令和系统调用109

4.5编写pwd113

4.5.1 pwd的工作过程113

4.5.2 pwd的一种版本114

4.6多个文件系统的组合:由多棵树构成的树116

4.6.1装载点117

4.6.2多重i-节点号和设备交叉链接118

4.6.3符号链接119

小结120

第5章 连接控制:学习stty124

5.1为设备编程124

5.2设备就像文件124

5.2.1设备具有文件名125

5.2.2设备和系统调用125

5.2.3例子:终端就像文件126

5.2.4设备文件的属性126

5.2.5编写write程序127

5.2.6设备文件和i-节点128

5.3设备与文件的不同之处129

5.4.1属性1:缓冲130

5.4磁盘连接的属性130

5.4.2属性2:自动添加模式132

5.4.3用open控制文件描述符133

5.4.4磁盘连接小结134

5.5终端连接的属性135

5.5.1终端的I/O并不如此简单135

5.5.2终端驱动程序137

5.5.3 stty命令137

5.5.4编写终端驱动程序:关于设置138

5.5.5编写终端驱动程序:关于函数139

5.5.6编写终端驱动程序:关于位140

5.5.7编写终端驱动程序:几个程序例子142

5.6其他设备编程:ioctl146

5.5.8终端连接小结146

5.7文件、设备和流147

小结147

第6章 为用户编程:终端控制和信号153

6.1软件工具与针对特定设备编写的程序153

6.2终端驱动程序的模式154

6.2.1规范模式:缓冲和编辑155

6.2.2非规范处理156

6.2.3终端模式小结157

6.3编写一个用户程序:play_again.c158

6.4.2信号是什么168

6.4.1 Ctrl-C做什么168

6.4信号168

6.4.3进程该如何处理信号170

6.4.4信号处理的例子171

6.5为处理信号做准备:play_again4.c173

6.6进程终止176

6.7为设备编程176

小结176

第7章 事件驱动编程:编写一个视频游戏180

7.1视频游戏和操作系统180

7.2任务:单人弹球游戏(Pong)182

7.3屏幕编程:curses库182

7.3.1介绍curses182

7.4 时间编程:sleep185

7.3.2 curses内部:虚拟和实际屏幕185

7.5时钟编程1:Alarms188

7.5.1添加时延:sleep189

7.5.2 sleep()是如何工作的:使用Unix中的Alarms189

7.5.3调度将要发生的动作191

7.6时间编程2:间隔计时器191

7.6.1添加精度更高的时延:usleep192

7.6.2三种计时器:真实、进程和实用192

7.6.3两种间隔:初始和重复192

7.6.4用间隔计时器编程193

7.6.5计算机有几个时钟196

7.6.6计时器小结197

7.7.2处理多个信号198

7.7信号处理1:使用signal198

7.7.1早期的信号处理机制198

7.7.3测试多个信号200

7.7.4信号机制其他的弱点202

7.8信号处理2:sigaction203

7.8.1处理多个信号:sigaction203

7.8.2信号小结206

7.9 防止数据损毁(Data Corruption)206

7.9.1数据损毁的例子206

7.9.2临界区(Critical Sections)206

7.9.3阻塞信号:sigprocmask和sigsetops207

7.9.4重入代码(Reentrant Code):递归调用的危险208

7.9.5视频游戏中的临界区208

7.10 kill:从另一个进程发送的信号209

7.11.1 bou nceld.c:在一条线上控制动画210

7.11使用计时器和信号:视频游戏210

7.11.2 bounce2d.c:两维动画213

7.11.3完成游戏218

7.12输入信号:异步I/O218

7.12.1使用异步I/O218

7.12.2 方法1:使用O_ASYNC218

7.12.3方法2:使用aio_read221

7.12.4弹球程序中需要异步读入吗224

7.12.5异步输入、视频游戏和操作系统224

小结224

8.1进程=运行中的程序228

第8章 进程和程序:编写命令解释器sh228

8.2通过命令ps学习进程229

8.2.1 系统进程231

8.2.2进程管理和文件管理232

8.2.3内存和程序232

8.3 shell:进程控制和程序控制的一个工具233

8.4 shell是如何运行程序的234

8.4.1 shell的主循环234

8.4.2 问题1:一个程序如何运行另一个程序235

8.4.3问题2:如何建立新的进程240

8.4.4问题3:父进程如何等待子进程的退出244

8.4.5小结:shell如何运行程序249

8.5实现一个shell:psh2.c250

8.6思考:用进程编程254

8.7 exit和exec的其他细节255

8.7.1进程死亡:exit和_exit255

8.7.2 exec家族256

小结257

第9章 可编程的shell、shell变量和环境:编写自己的shell260

9.1 shell编程260

9.2什么是以及为什么要使用shell脚本语言260

9.3 smshl——命令行解析263

9.4.1 if语句做些什么270

9.4 shell中的流程控制270

9.4.2 if是如何工作的271

9.4.3在smsh中增加if272

9.4.4 smsh2.c:修改后的代码273

9.5 shell变量:局部和全局278

9.5.1使用shell变量279

9.5.2变量的存储280

9.5.3 增加变量命令:Built-ins280

9.5.4效果如何283

9.6环境:个性化设置284

9.6.1使用环境285

9.6.2什么是环境以及它是如何工作的286

9.6.3在smsh中增加环境处理288

9.6.4 varlib.c的代码290

9.7 已实现的shell的功能295

小结296

第10章 I/O重定向和管道299

10.1 shell编程299

10.2一个shell应用程序:监视系统用户300

10.3 标准I/O与重定向的若干概念301

10.3.1概念1:3个标准文件描述符302

10.3.2默认的连接:tty302

10.3.3程序都输出到stdout303

10.3.4重定向I/O的是shell而不是程序303

10.3.6概念2:“最低可用文件描述符(Lowest-Available-fd)”原则304

10.3.5理解I/O重定向304

10.3.7两个概念的结合305

10.4如何将stdin定向到文件305

10.4.1方法1:close then open305

10.4.2方法2:open..close..dup..close308

10.4.3系统调用dup小结310

10.4.4方法3:open..dup2..close310

10.4.5 shell为其他程序重定向stdin310

10.5为其他程序重定向I/O:who>userlist310

10.6管道编程314

10.6.1创建管道314

10.6.2使用fork来共享管道317

10.6.3使用pipe、fork以及exec318

10.6.4技术细节:管道并非文件320

小结321

第11章 连接到近端或远端的进程:服务器与Socket(套接字)325

11.1产品和服务325

11.2一个简单的比喻:饮料机接口326

11.3 bc:Unix中使用的计算器327

11.3.1 编写bc:pipe、fork、dup、exec328

11.3.2对协同进程的讨论332

11.3.3 fdopen:让文件描述符像文件一样使用332

11.4 popen:让进程看似文件332

11.4.1 popen的功能332

11.4.2实现popen:使用fdopen命令334

11.4.3访问数据:文件、应用程序接口(API)和服务器336

11.5 socket:与远端进程相连337

11.5.1类比:“电话中传来声音:现在时间是338

11.5.2 因特网时间、DAP和天气服务器340

11.5.3服务列表:众所周知的端口341

11.5.4编写timeserv.c:时间服务器342

11.5.5测试timeserv.c347

11.5.6编写timeclnt.c:时间服务客户端347

11.5.7测试timeclnt.c350

11.5.8另一种服务器:远程的ls351

11.6软件精灵356

小结356

12.1服务器设计重点360

12.2三个主要操作360

第12章 连接和协议:编写Web服务器360

12.3操作1和操作2:建立连接361

12.3.1操作1:建立服务器端socket361

12.3.2操作2:建立到服务器的连接362

12.3.3 socklib.c362

12.4操作3:客户/服务器的会话364

12.4.1使用socklib.c的timeserv/timeclnt365

12.4.2第2版的服务器:使用fork366

12.4.3服务器的设计问题:DIY或代理367

12.5编写Web服务器369

12.5.1 Web服务器功能369

12.5.3 Web服务器协议370

12.5.2设计Web服务器370

12.5.4编写Web服务器372

12.5.5运行Web服务器374

12.5.6 Webserv的源程序374

12.5.7比较Web服务器379

小结379

第13章 基于数据报(Datagram)的编程:编写许可证服务器①381

13.1软件控制381

13.2许可证控制简史382

13.3一个非计算机系统实例:轿车管理系统383

13.3.1轿车钥匙管理描述383

13.3.2用客户/服务器方式管理轿车383

13.4.1许可证服务系统:它做些什么384

13.4许可证管理384

13.4.2许可证服务系统:如何工作385

13.4.3一个通信系统的例子386

13.5数据报socket386

13.5.1流与数据报的比较387

13.5.2数据报编程388

13.5.3 sendto和recvfrom的小结393

13.5.4数据报应答394

13.5.5数据报小结396

13.6许可证服务器版本1.0396

13.6.1客户端版本1397

13.6.2服务器端版本1401

13.6.3测试版本1406

13.6.4进一步的工作407

13.7处理现实的问题407

13.7.1处理客户端崩溃407

13.7.2处理服务器崩溃410

13.7.3测试版本2412

13.8分布式许可证服务器414

13.9 Unix 域socket416

13.9.1文件名作为socket地址416

13.9.2使用Unix域socket编程416

13.10小结:socket和服务器419

小结419

14.1 同一时刻完成多项任务423

第14章 线程机制:并发函数的使用423

14.2函数的执行路线424

14.2.1一个单线程程序424

14.2.2一个多线程程序425

14.2.3相关函数小结427

14.3线程间的分工合作428

14.3.1 例1:incrprint.c428

14.3.2 例2:twordcount.c430

14.3.3线程内部的分工合作:小结436

14.4线程与进程437

14.5线程间互通消息438

14.5.1通知选举中心439

14.5.2使用条件变量编写程序440

14.5.3使用条件变量的函数443

14.5.4 回到Web服务器的例子444

14.6多线程的Web服务器444

14.6.1 Web服务器程序的改进445

14.6.2多线程版本允许一个新的功能445

14.6.3 防止僵尸线程(Zombie Threads):独立线程445

14.6.4 Web服务器代码445

14.7线程和动画452

14.7.1使用线程的优点452

14.7.2多线程版本的bounceld.c453

14.7.3基于多线程机制的多重动画:tanimate.c455

14.7.4 tanimate.c中的互斥量458

14.7.5屏幕控制线程459

小结460

第15章 进程间通信(IPC)464

15.1编程方式的选择464

15.2 talk命令:从多个数据源读取数据465

15.2.1 同时从两个文件描述符读取数据465

15.2.2 select系统调用466

15.2.3 select与talk469

15.2.4 select与poll469

15.3通信的选择469

15.3.1一个问题的三种解决方案470

15.3.2通过文件的进程间通信470

15.3.3命名管道471

15.3.4共享内存473

15.3.5各种进程间通信方法的比较475

15.4进程之间的分工合作476

15.4.1文件锁476

15.4.2信号量(Semaphores)480

15.4.3 socket及FIFO与共享的存储487

15.5打印池488

15.5.1多个写者、一个读者488

15.5.2客户/服务器模型489

15.6纵观IPC490

15.7连接与游戏492

小结493

热门推荐