图书介绍

UNIX编程艺术埃瑞克理曼德计算机与互联网书籍

  • [美] 埃瑞克.S.理曼德 著;姜宏,何源,蔡晓骏 译
  • 店铺: 文轩网旗舰店
  • 出版社: 电子工业出版社
  • ISBN:9787121176654
  • 版次:1
  • 上架时间:2015-01-20 01:08:50
  • 商品编码:1027596161
  • 丛书名: 传世经典书丛
  • 开本:16开
  • 出版时间:2012-08-01
  • 页数:530
  • 字数:650000

微信扫码下载

手机扫码下载

电脑下载PDF

高速下载 普通下载

赞助商链接

图书目录


PartIⅠ1
第1章哲学3
1.1文化?什么文化3
1.2Unix的生命力4
1.3反对学习Unix文化的理由5
1.4Unix之失6
1.5Unix之得7
1.5.1开源软件7
1.5.2跨平台可移植性和开放标准8
1.5.3Internet和万维网8
1.5.4开源社区9
1.5.5从头到脚的灵活性9
1.5.6UnixHack之趣10
1.5.7Unix的经验别处也可适用11
1.6Unix哲学基础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.7Unix哲学之一言以蔽之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.3TCP/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.3Linux和实用主义者的应对:1991-199848
2.3开源运动:1998年及之后49
2.4Unix的历史教训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.1VMS61
3.2.2MacOS64
3.2.3OS/265
3.2.4WindowsNT68
3.2.5BeOS71
3.2.6MVS72
3.2.7VM/CMS74
3.2.8Linux76
3.3种什么籽,得什么果78
PartⅡ81
第4章模块性:保持清晰,保持简洁83
4.1封装和最佳模块大小85
4.2紧凑性和正交性87
4.2.1紧凑性87
4.2.2正交性89
4.2.3SPOT原则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.5Unix和面向对象语言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.1DSV风格113
5.2.2RFC822格式114
5.2.3Cookie—Jar格式115
5.2.4Record—Jar格式116
5.2.5XML117
5.2.6WindowsINI格式119
5.2.7Unix文本文件格式的约定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.3BEEP:块可扩展交换协议130
5.4.4XML—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.2UnixIPC方法的分类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废弃的UnixIPC方法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案例分析:TheDocumenter'sworkbenchTools195
8.2.7案例分析:fetchmail的运行控制语法199
8.2.8案例分析:awk200
8.2.9案例分析:PostScript202
8.2.10案例分析:bc和dc203
8.2.11案例分析:EmacsLisp205
8.2.12案例分析:205
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.2Unix接口设计的历史256
11.3接口设计评估257
11.4CLI和可视接口之间的权衡259
11.4.1实例分析:编写计算器程序的两种方式262
11.5透明度、表现力和可配置性264
11.6Unix接口设计模式266
11.6.1过滤器模式266
11.6.2Cantrip模式268
11.6.3源模式268
11.6.4接收器模式269
11.6.5编译器模式269
11.6.6ed模式270
11.6.7Roguelike模式270
11.6.8“引擎和接口分离”模式273
11.6.9CLI服务器模式278
11.6.10基于语言的接口模式279
11.7应用Unix接口设计模式280
11.7.1多价程序模式
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.1ed304
13.2.2vi305
13.2.3Sam306
13.2.4Emacs307
13.2.5Wily308
13.3编辑器的适当规模309
13.3.1甄别复杂度问题309
13.3.2折衷无用312
13.3.3Emacs是个反Unix传统的论据吗314
13.4软件的适度规模316
PartⅢ319
第14章语言:C还是非C321
14.1Unix下语言的丰饶321
14.2为什么不是C323
14.3解释型语言和混合策略325
14.4语言评估325
14.4.1C326
14.4.2C++327
14.4.3Shell330
14.4.4Perl332
14.4.5Tcl334
14.4.6Python336
14.4.7Java339
14.4.8EmacsLisp342
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.1yacc和lex353
15.3.2实例分析:fetchmailrc的语法356
15.3.3实例分析:Glade356
15.4make:自动化编译357
15.4.1make的基本理论357
15.4.2非C/C++开发中的make359
15.4.3通用生成目标359
15.4.4生成Makefile362
15.5版本控制系统364
15.5.1为什么需要版本控制364
15.5.2手工版本控制365
15.5.3自动化的版本控制366
15.5.4Unix的版本控制工具367
15.6运行期调试369
15.7性能分析370
15.8使用Emacs整合工具370
15.8.1Emacs和make371
15.8.2Emacs和运行期调试371
15.8.3Emacs和版本控制371
15.8.4Emacs和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Ⅳ391
第17章可移植性:软件可移植性与遵循标准393
17.1C语言的演化394
17.1.1早期的C语言395
17.1.2C语言标准396
17.2Unix标准398
17.2.1标准和Unix之战398
17.2.2庆功宴上的幽灵401
17.2.3开源世界的Unix标准402
17.3IETF和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.2Unix风格420
18.2.1大文档偏爱420
18.2.2文化风格421
18.3各种Unix文档格式422
18.3.1troff和Documenter'sWorkbenchTools422
18.3.2TEX424
18.3.3Texinfo425
18.3.4POD425
18.3.5HTML426
18.3.6DocBook426
18.4当前的混乱和可能的出路426
18.5DocBook427
18.5.1文档类型定义427
18.5.2其它DTD428
18.5.3DocBook工具链429
18.5.4移植工具431
18.5.5编辑工具432
18.5.6相关标准和实践433
18.5.7SGML433
18.5.8XML—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.1MIT或者Xconsortium许可证457
19.5.2经典BSD许可证457
19.5.3Artistic许可证458
19.5.4通用公共许可证458
19.5.5Mozilla公共许可证459
第20章未来:危机与机遇461
20.1Unix传统中的必然和偶然461
20.2Plang:未来之路464
20.3Unix设计中的问题466
20.3.1Unix文件就是一大袋字节466
20.3.2Unix对GUI的支持孱弱467
20.3.3文件删除不可撤销468
20.3.4Unix假定文件系统是静态的469
20.3.5作业控制设计拙劣469
20.3.6UnixAPI没有使用异常470
20.3.7ioctl(2)和fcntl(2)是个尴尬471
20.3.8Unix安全模型可能太过原始471
20.3.9Unix名字种类太多472
20.3.10文件系统可能有害论472
20.3.11朝向全局互联网地址空间472
20.4Unix的环境问题473
20.5Unix文化中的问题475
20.6信任的理由477
附录A缩写词表479
附录B参考文献483
附录C贡献者495
附录D无根的根:无名师的Unix心传499
Colophon510
索引511

查看全部 ↓

精品推荐