图书介绍

UNIX编程艺术PDF|Epub|txt|kindle电子书版本网盘下载

UNIX编程艺术
  • (美)埃瑞克·S.理曼德著 著
  • 出版社: 北京:电子工业出版社
  • ISBN:9787121176654
  • 出版时间:2012
  • 标注页数:530页
  • 文件大小:25MB
  • 文件页数:562页
  • 主题词:UNIX操作系统-程序设计

PDF下载


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

下载说明

UNIX编程艺术PDF格式电子书版下载

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

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

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

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

图书目录

Part I1

第1章 哲学3

1.1文化?什么文化3

1.2 Unix的生命力4

1.3反对学习Unix文化的理由5

1.4 Unix之失6

1.5 Unix之得7

1.5.1开源软件7

1.5.2跨平台可移植性和开放标准8

1.5.3 Internet和万维网8

1.5.4开源社区9

1.5.5从头到脚的灵活性9

1.5.6 Unix Hack之趣10

1.5.7 Unix的经验别处也可适用11

1.6 Unix哲学基础11

1.6.1模块原则:使用简洁的接口拼合简单的部件14

1.6.2清晰原则:清晰胜于机巧14

1.6.3组合原则:设计时考虑拼接组合15

1.6.4分离原则:策略同机制分离,接口同引擎分离16

1.6.5简洁原则:设计要简洁,复杂度能低则低17

1.6.6吝啬原则:除非确无它法,不要编写庞大的程序18

1.6.7透明性原则:设计要可见,以便审查和调试18

1.6.8健壮原则:健壮源于透明与简洁18

1.6.9表示原则:把知识叠入数据以求逻辑质朴而健壮19

1.6.10通俗原则:接口设计避免标新立异20

1.6.11缄默原则:如果一个程序没什么好说的,就保持沉默20

1.6.12补救原则:出现异常时,马上退出并给出足量错误信息21

1.6.13经济原则:宁花机器一分,不花程序员一秒22

1.6.14生成原则:避免手工hack,尽量编写程序去生成程序22

1.6.15优化原则:雕琢前先得有原型,跑之前先学会走23

1.6.16多样原则:决不相信所谓“不二法门”的断言24

1.6.17扩展原则:设计着眼未来,未来总比预想快24

1.7 Unix哲学之一言以蔽之25

1.8应用Unix哲学26

1.9态度也要紧26

第2章历史——双流记29

2.1Unix的起源及历史,1969—199529

2.1.1创世纪:1969—197130

2.1.2出埃及记:1971—198032

2.1.3 TCP/IP和Unix内战:1980—199035

2.1.4反击帝国:1991—199541

2.2黑客的起源和历史:1961—199543

2.2.1游戏在校园的林间:1961—198044

2.2.2互联网大融合与自由软件运动:1981—199145

2.2.3 Linux和实用主义者的应对:1991—199848

2.3开源运动:1998年及之后49

2.4 Unix的历史教训51

第3章 对比:Unix哲学同其他哲学的比较53

3.1操作系统的风格元素53

3.1.1什么是操作系统的统一性理念54

3.1.2多任务能力54

3.1.3协作进程55

3.1.4内部边界57

3.1.5文件属性和记录结构57

3.1.6二进制文件格式58

3.1.7首选用户界面风格58

3.1.8目标受众59

3.1.9开发的门坎60

3.2操作系统的比较61

3.2.1 VMS61

3.2.2 MacOS64

3.2.3 OS/265

3.2.4 Windows NT68

3.2.5 BeOS71

3.2.6 MVS72

3.2.7 VM/CMS74

3.2.8 Linux76

3.3种什么籽,得什么果78

Part Ⅱ81

第4章 模块性:保持清晰,保持简洁83

4.1封装和最佳模块大小85

4.2紧凑性和正交性87

4.2.1紧凑性87

4.2.2正交性89

4.2.3 SPOT原则91

4.2.4紧凑性和强单一中心92

4.2.5分离的价值94

4.3软件是多层的95

4.3.1自顶向下和自底向上95

4.3.2胶合层97

4.3.3实例分析:被视为薄胶合层的C语言98

4.4程序库99

4.4.1实例分析:GIMP插件100

4.5 Unix和面向对象语言101

4.6模块式编码103

第5章 文本化:好协议产生好实践105

5.1文本化的重要性107

5.1.1实例分析:Unix口令文件格式109

5.1.2实例分析:.newsrc格式110

5.1.3实例分析:PNG图形文件格式111

5.2数据文件元格式112

5.2.1 DSV风格113

5.2.2 RFC 822格式114

5.2.3 Cookie-Jar格式115

5.2.4 Record-Jar格式116

5.2.5 XML117

5.2.6 Windows INI格式119

5.2.7 Unix文本文件格式的约定120

5.2.8文件压缩的利弊122

5.3应用协议设计123

5.3.1实例分析:SMTP,一个简单的套接字协议124

5.3.2实例分析:POP3,邮局协议124

5.3.3实例分析:IMAP,互联网消息访问协议126

5.4应用协议元格式127

5.4.1经典的互联网应用元协议127

5.4.2作为通用应用协议的HTTP128

5.4.3 BEEP:块可扩展交换协议130

5.4.4 XML-RPC, SOAP和Jabber131

第6章 透明性:来点儿光133

6.1研究实例135

6.1.1实例分析:audacity135

6.1.2实例分析:fetchmail的-v选项136

6.1.3实例分析:GCC139

6.1.4实例分析:kmail140

6.1.5实例分析:SNG142

6.1.6实例分析:Terminfo数据库144

6.1.7实例分析:Freeciv数据文件146

6.2为透明性和可显性而设计148

6.2.1透明性之禅149

6.2.2为透明性和可显性而编码150

6.2.3透明性和避免过度保护151

6.2.4透明性和可编辑的表现形式152

6.2.5透明性、故障诊断和故障恢复153

6.3为可维护性而设计154

第7章 多道程序设计:分离进程为独立的功能157

7.1从性能调整中分离复杂度控制159

7.2 Unix IPC方法的分类160

7.2.1把任务转给专门程序160

7.2.2管道、重定向和过滤器161

7.2.3包装器166

7.2.4安全性包装器和Bernstein链167

7.2.5从进程168

7.2.6对等进程间通信169

7.3要避免的问题和方法176

7.3.1废弃的Unix IPC方法176

7.3.2远程过程调用178

7.3.3线程——恐吓或威胁180

7.4在设计层次上的进程划分181

第8章 微型语言:寻找歌唱的乐符183

8.1理解语言分类法185

8.2应用微型语言187

8.2.1案例分析:sng187

8.2.2案例分析:正则表达式188

8.2.3案例分析:Glade191

8.2.4案例分析:m4193

8.2.5案例分析:XSLT194

8.2.6案例分析:The Documenter’s Workbench Tools195

8.2.7案例分析:fetchmail的运行控制语法199

8.2.8案例分析:awk200

8.2.9案例分析:PostScript202

8.2.10案例分析:bc和dc203

8.2.11案例分析:Emacs Lisp205

8.2.12案例分析:JavaScript205

8.3设计微型语言206

8.3.1选择正确的复杂度207

8.3.2扩展和嵌入语言209

8.3.3编写自定义语法210

8.3.4宏—慎用210

8.3.5语言还是应用协议212

第9章 生成:提升规格说明的层次215

9.1数据驱动编程216

9.1.1实例分析:ascii217

9.1.2实例分析:统计学的垃圾邮件统计218

9.1.3实例分析:fetchmailconf中的元类改动219

9.2专用代码的生成225

9.2.1实例分析:生成ascii显示的代码225

9.2.2实例分析:为列表生成HTML代码227

第10章 配置:迈出正确的第一步231

10.1什么应是可配置的231

10.2配置在哪里233

10.3运行控制文件234

10.3.1实例分析:.netrc文件236

10.3.2到其它操作系统的可移植性238

10.4环境变量238

10.4.1系统环境变量238

10.4.2用户环境变量240

10.4.3何时使用环境变量240

10.4.4到其它操作系统的可移植性242

10.5命令行选项242

10.5.1从-a到-z的命令行选项243

10.5.2到其它操作系统的可移植性248

10.6如何挑选方法248

10.6.1实例分析:fetchmail249

10.6.2实例分析:XFree86服务器251

10.7论打破规则252

第11章 接口:Unix环境下的用户接口设计模式253

11.1最小立异原则的应用254

11.2 Unix接口设计的历史256

11.3接口设计评估257

11.4 CLI和可视接口之间的权衡259

11.4.1实例分析:编写计算器程序的两种方式262

11.5透明、表现力和可配置264

11.6 Unix接口设计模式266

11.6.1过滤器模式266

11.6.2 Cantrip模式268

11.6.3源模式268

11.6.4接收器模式269

11.6.5编译器模式269

11.6.6 ed模式270

11.6.7 Roguelike模式270

11.6.8“引擎和接口分离”模式273

11.6.9 CLI服务器模式278

11.6.10基于语言的接口模式279

11.7应用Unix接口设计模式280

11.7.1多价程序模式281

11.8网页浏览器作为通用前端281

11.9沉默是金284

第12章 优化287

12.1什么也别做,就站在那儿287

12.2先估量,后优化288

12.3非定域性之害290

12.4吞吐量和延迟291

12.4.1批操作292

12.4.2重叠操作293

12.4.3缓存操作结果293

第13章 复杂度:尽可能简单,但别简单过了头295

13.1谈谈复杂度296

13.1.1复杂度的三个来源296

13.1.2接口复杂度和实现复杂度的折中298

13.1.3平质的、选择的和偶然的复杂度299

13.1.4映射复杂度300

13.1.5当简洁性不能胜任302

13.2五个编辑器的故事302

13.2.1 ed304

13.2.2 vi305

13.2.3 Sam306

13.2.4 Emacs307

13.2.5 Wily308

13.3编辑器的适当规模309

13.3.1甄别复杂度问题309

13.3.2折中无用312

13.3.3 Emacs是个反Unix传统的论据吗314

13.4软件的适度规模316

Part Ⅲ319

第14章 语言:C还是非C321

14.1 Unix下语言的丰饶321

14.2为什么不是C323

14.3解释型语言和混合策略325

14.4语言评估325

14.4.1 C326

14.4.2 C++++327

14.4.3 Shell330

14.4.4 Perl332

14.4.5 Tcl334

14.4.6 Python336

14.4.7 Java339

14.4.8 Emacs Lisp342

14.5未来趋势344

14.6选择X工具包346

第15章 工具:开发的战术349

15.1开发者友好的操作系统349

15.2编辑器选择350

15.2.1了解vi351

15.2.2了解Emacs351

15.2.3非虔诚的选择:两者兼用352

15.3专用代码生成器352

15.3.1 yacc和lex353

15.3.2实例分析:fetchmailrc的语法356

15.3.3实例分析:Glade356

15.4 make:自动化编译357

15.4.1 make的基本理论357

15.4.2非C/C++++开发中的make359

15.4.3通用生成目标359

15.4.4生成Makefiile362

15.5版本控制系统364

15.5.1为什么需要版本控制364

15.5.2手工版本控制365

15.5.3自动化的版本控制366

15.5.4 Unix的版本控制工具367

15.6运行期调试369

15.7性能分析370

15.8使用Emacs整合工具370

15.8.1 Emacs和make371

15.8.2 Emacs和运行期调试371

15.8.3 Emacs和版本控制371

15.8.4 Emacs和Profiling372

15.8.5像IDE一样,但更强373

第16章 重用:论不要重新发明轮子375

16.1猪小兵的故事376

16.2透明性是重用的关键379

16.3从重用到开源380

16.4生命中最美好的就是“开放”381

16.5何处找384

16.6使用开源软件的问题385

16.7许可证问题386

16.7.1开放源码的资格386

16.7.2标准开放源码许可证388

16.7.3何时需要律师390

Part IV391

第17章 可移植性:软件可移植性与遵循标准393

17.1 C语言的演化394

17.1.1早期的C语言395

17.1.2 C语言标准396

17.2 Umx标准398

17.2.1标准和Unix之战398

17.2.2庆功宴上的幽灵401

17.2.3开源世界的Unix标准402

17.3 IETF和RFC标准化过程403

17.4规格DNA,代码RNA405

17.5可移植性编程408

17.5.1可移植性和编程语言选择409

17.5.2避免系统依赖性412

17.5.3移植工具413

17.6国际化413

17.7可移植性、开放标准以及开放源码414

第18章 文档:向网络世界阐释代码417

18.1文档概念418

18.2 Unix风格420

18.2.1大文档偏爱420

18.2.2文化风格421

18.3各种Unix文档格式422

18.3.1troff和Documenter’s Workbench Tools422

18.3.2 TEX424

18.3.3 Texinfo425

18.3.4 POD425

18.3.5 HTML426

18.3.6 DocBook426

18.4当前的混乱和可能的出路426

18.5 DocBook427

18.5.1文档类型定义427

18.5.2其它DTD428

18.5.3 DocBook工具链429

18.5.4移植工具431

18.5.5编辑工具432

18.5.6相关标准和实践433

18.5.7 SGML433

18.5.8 XML-DocBook参考书籍433

18.6编写Unix文档的最佳实践434

第19章 开放源码:在Unix新社区中编程437

19.1Unix和开放源码438

19.2与开源开发者协同工作的最佳实践440

19.2.1良好的修补实践440

19.2.2良好的项目、档案文件命名实践444

19.2.3良好的开发实践447

19.2.4良好的发行制作实践450

19.2.5良好的交流实践454

19.3许可证的逻辑:如何挑选456

19.4为什么应使用某个标准许可证457

19.5各种开源许可证457

19.5.1 MIT或者X Consortium许可证457

19.5.2经典BSD许可证457

19.5.3 Artistic许可证458

19.5.4通用公共许可证458

19.5.5 Mozilla公共许可证459

第20章 未来:危机与机遇461

20.1 Unix传统中的平质和偶然461

20.2 Plan 9:未来之路464

20.3 Unix设计中的问题466

20.3.1 Unix文件就是一大袋字节466

20.3.2 Unix对GUI的支持孱弱467

20.3.3文件删除不可撤销468

20.3.4 Unix假定文件系统是静态的469

20.3.5作业控制设计拙劣469

20.3.6 Unix API没有使用异常470

20.3.7 ioctl(2)和fcntl(2)是个尴尬471

20.3.8 Unix安全模型可能太过原始471

20.3.9 Unix名字种类太多472

20.3.10文件系统可能有害论472

20.3.11朝向全局互联网地址空间472

20.4 Unix的环境问题473

20.5 Unix文化中的问题475

20.6信任的理由477

附录A缩写词表479

附录B 参考文献483

附录C贡献者495

附录D无根的根:无名师的Unix心传499

Colophon510

索引511

读者评论527

热门推荐