人們習(xí)慣用經(jīng)典名著、典藏的不二之選這樣來(lái)詞匯來(lái)評(píng)價(jià)Unix編程藝術(shù)這本書(shū),的確,這本書(shū)不僅完全展現(xiàn)了作者極其深厚的經(jīng)驗(yàn)積累,更展現(xiàn)出了作者在所在的領(lǐng)域的智慧。該書(shū)覆蓋面廣、內(nèi)容深邃,是一本非常值得一看的書(shū),本節(jié)內(nèi)容小編為大家整理帶來(lái)的是關(guān)于這本書(shū)的pdf格式中文版本,有需要的朋友點(diǎn)擊本文相應(yīng)的下載地址即可查看這本書(shū)的完整版!
Unix編程藝術(shù)內(nèi)容截圖
Unix編程藝術(shù)目錄
序 xxv
Part I 1
第1章 哲學(xué) 3
1.1 文化?什么文化 3
1.2 Unix的生命力 4
1.3 反對(duì)學(xué)習(xí)Unix文化的理由 5
1.4 Unix之失 6
1.5 Unix之得 7
1.5.1 開(kāi)源軟件 7
1.5.2 跨平臺(tái)可移植性和開(kāi)放標(biāo)準(zhǔn) 8
1.5.3 Internet和萬(wàn)維網(wǎng) 8
1.5.4 開(kāi)源社區(qū) 9
1.5.5 從頭到腳的靈活性 9
1.5.6 Unix Hack之趣 10
1.5.7 Unix的經(jīng)驗(yàn)別處也可適用 11
1.6 Unix哲學(xué)基礎(chǔ) 11
1.6.1 模塊原則:使用簡(jiǎn)潔的接口拼合簡(jiǎn)單的部件 14
1.6.2 清晰原則: 清晰勝于機(jī)巧 14
1.6.3 組合原則:設(shè)計(jì)時(shí)考慮拼接組合 15
1.6.4 分離原則: 策略同機(jī)制分離,接口同引擎分離 16
1.6.5 簡(jiǎn)潔原則:設(shè)計(jì)要簡(jiǎn)潔,復(fù)雜度能低則低 17
1.6.6 吝嗇原則: 除非確無(wú)它法,不要編寫(xiě)龐大的程序 18
1.6.7 透明性原則:設(shè)計(jì)要可見(jiàn),以便審查和調(diào)試 18
1.6.8 健壯原則: 健壯源于透明與簡(jiǎn)潔 18
1.6.9 表示原則: 把知識(shí)疊入數(shù)據(jù)以求邏輯質(zhì)樸而健壯 19
1.6.10 通俗原則:接口設(shè)計(jì)避免標(biāo)新立異 20
1.6.11 緘默原則:如果一個(gè)程序沒(méi)什么好說(shuō)的,就保持沉默 20
1.6.12 補(bǔ)救原則: 出現(xiàn)異常時(shí),馬上退出并給出足量錯(cuò)誤信息 21
1.6.13 經(jīng)濟(jì)原則: 寧花機(jī)器一分,不花程序員一秒 22
1.6.14 生成原則: 避免手工hack,盡量編寫(xiě)程序去生成程序 22
1.6.15 優(yōu)化原則: 雕琢前先得有原型,跑之前先學(xué)會(huì)走 23
1.6.16 多樣原則:決不相信所謂“不二法門(mén)”的斷言 24
1.6.17 擴(kuò)展原則: 設(shè)計(jì)著眼未來(lái),未來(lái)總比預(yù)想快 24
1.7 Unix哲學(xué)之一言以蔽之 25
1.8 應(yīng)用Unix哲學(xué) 26
1.9 態(tài)度也要緊 26
第2章 歷史——雙流記 29
2.1 Unix的起源及歷史,1969-1995 29
2.1.1 創(chuàng)世紀(jì):1969-1971 30
2.1.2 出埃及記:1971-1980 32
2.1.3 TCP/IP 和Unix內(nèi)戰(zhàn):1980-1990 35
2.1.4 反擊帝國(guó):1991-1995 41
2.2 黑客的起源和歷史:1961-1995 43
2.2.1 游戲在校園的林間:1961-1980 44
2.2.2 互聯(lián)網(wǎng)大融合與自由軟件運(yùn)動(dòng):1981-1991 45
2.2.3 Linux 和實(shí)用主義者的應(yīng)對(duì):1991-1998 48
2.3 開(kāi)源運(yùn)動(dòng):1998年及之后 49
2.4 Unix的歷史教訓(xùn) 51
第3章 對(duì)比: Unix哲學(xué)同其他哲學(xué)的比較 53
3.1 操作系統(tǒng)的風(fēng)格元素 53
3.1.1 什么是操作系統(tǒng)的統(tǒng)一性理念 54
3.1.2 多任務(wù)能力 54
3.1.3 協(xié)作進(jìn)程 55
3.1.4 內(nèi)部邊界 57
3.1.5 文件屬性和記錄結(jié)構(gòu) 57
3.1.6 二進(jìn)制文件格式 58
3.1.7 首選用戶(hù)界面風(fēng)格 58
3.1.8 目標(biāo)受眾 59
3.1.9 開(kāi)發(fā)的門(mén)坎 60
3.2 操作系統(tǒng)的比較 61
3.2.1 VMS 61
3.2.2 MacOS 64
3.2.3 OS/2 65
3.2.4 Windows NT 68
3.2.5 BeOS 71
3.2.6 MVS 72
3.2.7 VM/CMS 74
3.2.8 Linux 76
3.3 種什么籽,得什么果 78
Part II 81
第4章 模塊性:保持清晰,保持簡(jiǎn)潔 83
4.1 封裝和最佳模塊大小 85
4.2 緊湊性和正交性 87
4.2.1 緊湊性 87
4.2.2 正交性 89
4.2.3 SPOT原則 91
4.2.4 緊湊性和強(qiáng)單一中心 92
4.2.5 分離的價(jià)值 94
4.3 軟件是多層的 95
4.3.1 自頂向下和自底向上 95
4.3.2 膠合層 97
4.3.3 實(shí)例分析:被視為薄膠合層的C語(yǔ)言 98
4.4 程序庫(kù) 99
4.4.1 實(shí)例分析:GIMP插件 100
4.5 Unix和面向?qū)ο笳Z(yǔ)言 101
4.6 模塊式編碼 103
第5章 文本化:好協(xié)議產(chǎn)生好實(shí)踐 105
5.1 文本化的重要性 107
5.1.1 實(shí)例分析:Unix口令文件格式 109
5.1.2 實(shí)例分析:.newsrc格式 110
5.1.3 實(shí)例分析:PNG圖形文件格式 111
5.2 數(shù)據(jù)文件元格式 112
5.2.1 DSV 風(fēng)格 113
5.2.2 RFC 822 格式 114
5.2.3 Cookie-Jar格式 115
5.2.4 Record-Jar格式 116
5.2.5 XML 117
5.2.6 Windows INI 格式 119
5.2.7 Unix文本文件格式的約定 120
5.2.8 文件壓縮的利弊 122
5.3 應(yīng)用協(xié)議設(shè)計(jì) 123
5.3.1 實(shí)例分析:SMTP,一個(gè)簡(jiǎn)單的套接字協(xié)議 124
5.3.2 實(shí)例分析:POP3,郵局協(xié)議 124
5.3.3 實(shí)例分析:IMAP,互聯(lián)網(wǎng)消息訪問(wèn)協(xié)議 126
5.4 應(yīng)用協(xié)議元格式 127
5.4.1 經(jīng)典的互聯(lián)網(wǎng)應(yīng)用元協(xié)議 127
5.4.2 作為通用應(yīng)用協(xié)議的HTTP 128
5.4.3 BEEP:塊可擴(kuò)展交換協(xié)議 130
5.4.4 XML-RPC,SOAP和Jabber 131
第6章 透明性:來(lái)點(diǎn)兒光 133
6.1 研究實(shí)例 135
6.1.1 實(shí)例分析:audacity 135
6.1.2 實(shí)例分析:fetchmail的–v選項(xiàng) 136
6.1.3 實(shí)例分析:GCC 139
6.1.4 實(shí)例分析:kmail 140
6.1.5 實(shí)例分析:SNG 142
6.1.6 實(shí)例分析:Terminfo數(shù)據(jù)庫(kù) 144
6.1.7 實(shí)例分析:Freeciv數(shù)據(jù)文件 146
6.2 為透明性和可顯性而設(shè)計(jì) 148
6.2.1 透明性之禪 149
6.2.2 為透明性和可顯性而編碼 150
6.2.3 透明性和避免過(guò)度保護(hù) 151
6.2.4 透明性和可編輯的表現(xiàn)形式 152
6.2.5 透明性、故障診斷和故障恢復(fù) 153
6.3 為可維護(hù)性而設(shè)計(jì) 154
第7章 多道程序設(shè)計(jì): 分離進(jìn)程為獨(dú)立的功能 157
7.1 從性能調(diào)整中分離復(fù)雜度控制 159
7.2 Unix IPC 方法的分類(lèi) 160
7.2.1 把任務(wù)轉(zhuǎn)給專(zhuān)門(mén)程序 160
7.2.2 管道、重定向和過(guò)濾器 161
7.2.3 包裝器 166
7.2.4 安全性包裝器和Bernstein鏈 167
7.2.5 從進(jìn)程 168
7.2.6 對(duì)等進(jìn)程間通信 169
7.3 要避免的問(wèn)題和方法 176
7.3.1 廢棄的Unix IPC方法 176
7.3.2 遠(yuǎn)程過(guò)程調(diào)用 178
7.3.3 線程——恐嚇或威脅 180
7.4 在設(shè)計(jì)層次上的進(jìn)程劃分 181
第8章 微型語(yǔ)言:尋找歌唱的樂(lè)符 183
8.1 理解語(yǔ)言分類(lèi)法 185
8.2 應(yīng)用微型語(yǔ)言 187
8.2.1 案例分析:sng 187
8.2.2 案例分析:正則表達(dá)式 188
8.2.3 案例分析:Glade 191
8.2.4 案例分析:m4 193
8.2.5 案例分析:XSLT 194
8.2.6 案例分析:The Documenter's Workbench Tools 195
8.2.7 案例分析:fetchmail的運(yùn)行控制語(yǔ)法 199
8.2.8 案例分析:awk 200
8.2.9 案例分析:PostScript 202
8.2.10 案例分析:bc和dc 203
8.2.11 案例分析:Emacs Lisp 205
8.2.12 案例分析:JavaScript 205
8.3 設(shè)計(jì)微型語(yǔ)言 206
8.3.1 選擇正確的復(fù)雜度 207
8.3.2 擴(kuò)展和嵌入語(yǔ)言 209
8.3.3 編寫(xiě)自定義語(yǔ)法 210
8.3.4 宏—慎用 210
8.3.5 語(yǔ)言還是應(yīng)用協(xié)議 212
第9章 生成:提升規(guī)格說(shuō)明的層次 215
9.1 數(shù)據(jù)驅(qū)動(dòng)編程 216
9.1.1 實(shí)例分析:ascii 217
9.1.2 實(shí)例分析:統(tǒng)計(jì)學(xué)的垃圾郵件統(tǒng)計(jì) 218
9.1.3 實(shí)例分析:fetchmailconf中的元類(lèi)改動(dòng) 219
9.2 專(zhuān)用代碼的生成 225
9.2.1 實(shí)例分析:生成ascii顯示的代碼 225
9.2.2 實(shí)例分析:為列表生成HTML代碼 227
第10章 配置:邁出正確的第一步 231
10.1 什么應(yīng)是可配置的 231
10.2 配置在哪里 233
10.3 運(yùn)行控制文件 234
10.3.1 實(shí)例分析:.netrc文件 236
10.3.2 到其它操作系統(tǒng)的可移植性 238
10.4 環(huán)境變量 238
10.4.1 系統(tǒng)環(huán)境變量 238
10.4.2 用戶(hù)環(huán)境變量 240
10.4.3 何時(shí)使用環(huán)境變量 240
10.4.4 到其它操作系統(tǒng)的可移植性 242
10.5 命令行選項(xiàng) 242
10.5.1 從–a到–z的命令行選項(xiàng) 243
10.5.2 到其它操作系統(tǒng)的可移植性 248
10.6 如何挑選方法 248
10.6.1 實(shí)例分析:fetchmail 249
10.6.2 實(shí)例分析:XFree86服務(wù)器 251
10.7 論打破規(guī)則 252
第11章 接口:Unix環(huán)境下的用戶(hù)接口設(shè)計(jì)模式 253
11.1 最小立異原則的應(yīng)用 254
11.2 Unix接口設(shè)計(jì)的歷史 256
11.3 接口設(shè)計(jì)評(píng)估 257
11.4 CLI和可視接口之間的權(quán)衡 259
11.4.1 實(shí)例分析:編寫(xiě)計(jì)算器程序的兩種方式 262
11.5 透明度、表現(xiàn)力和可配置性 264
11.6 Unix接口設(shè)計(jì)模式 266
11.6.1 過(guò)濾器模式 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服務(wù)器模式 278
11.6.10 基于語(yǔ)言的接口模式 279
11.7 應(yīng)用Unix接口設(shè)計(jì)模式 280
11.7.1
11.8 網(wǎng)頁(yè)瀏覽器作為通用前端 281
11.9 沉默是金 284
第12章 優(yōu)化 287
12.1 什么也別做,就站在那兒 287
12.2 先估量,后優(yōu)化 288
12.3 非定域性之害 290
12.4 吞吐量和延遲 291
12.4.1 批操作 292
12.4.2 重疊操作 293
12.4.3 緩存操作結(jié)果 293
第13章 復(fù)雜度:盡可能簡(jiǎn)單,但別簡(jiǎn)過(guò)了頭 295
13.1 談?wù)剰?fù)雜度 296
13.1.1 復(fù)雜度的三個(gè)來(lái)源 296
13.1.2 接口復(fù)雜度和實(shí)現(xiàn)復(fù)雜度的折中 298
13.1.3 必然的、可能的和偶然的復(fù)雜度 299
13.1.4 映射復(fù)雜度 300
13.1.5 當(dāng)簡(jiǎn)潔性不能勝任 302
13.2 五個(gè)編輯器的故事 302
13.2.1 ed 304
13.2.2 vi 305
13.2.3 Sam 306
13.2.4 Emacs 307
13.2.5 Wily 308
13.3 編輯器的適當(dāng)規(guī)模 309
13.3.1 甄別復(fù)雜度問(wèn)題 309
13.3.2 折衷無(wú)用 312
13.3.3 Emacs是個(gè)反Unix傳統(tǒng)的論據(jù)嗎 314
13.4 軟件的適度規(guī)模 316
Part III 319
第14章 語(yǔ)言:C還是非C 321
14.1 Unix下語(yǔ)言的豐饒 321
14.2 為什么不是C 323
14.3 解釋型語(yǔ)言和混合策略 325
14.4 語(yǔ)言評(píng)估 325
14.4.1 C 326
14.4.2 C++ 327
14.4.3 Shell 330
14.4.4 Perl 332
14.4.5 Tcl 334
14.4.6 Python 336
14.4.7 Java 339
14.4.8 Emacs Lisp 342
14.5 未來(lái)趨勢(shì) 344
14.6 選擇X工具包 346
第15章 工具:開(kāi)發(fā)的戰(zhàn)術(shù) 349
15.1 開(kāi)發(fā)者友好的操作系統(tǒng) 349
15.2 編輯器選擇 350
15.2.1 了解vi 351
15.2.2 了解Emacs 351
15.2.3 非虔誠(chéng)的選擇:兩者兼用 352
15.3 專(zhuān)用代碼生成器 352
15.3.1 yacc和lex 353
15.3.2 實(shí)例分析:fetchmailrc的語(yǔ)法 356
15.3.3 實(shí)例分析:Glade 356
15.4 make:自動(dòng)化編譯 357
15.4.1 make的基本理論 357
15.4.2 非C/C++開(kāi)發(fā)中的make 359
15.4.3 通用生成目標(biāo) 359
15.4.4 生成Makefile 362
15.5 版本控制系統(tǒng) 364
15.5.1 為什么需要版本控制 364
15.5.2 手工版本控制 365
15.5.3 自動(dòng)化的版本控制 366
15.5.4 Unix的版本控制工具 367
15.6 運(yùn)行期調(diào)試 369
15.7 性能分析 370
15.8 使用Emacs整合工具 370
15.8.1 Emacs和make 371
15.8.2 Emacs和運(yùn)行期調(diào)試 371
15.8.3 Emacs和版本控制 371
15.8.4 Emacs和Profiling 372
15.8.5 像IDE一樣,但更強(qiáng) 373
第16章 重用:論不要重新發(fā)明輪子 375
16.1 豬小兵的故事 376
16.2 透明性是重用的關(guān)鍵 379
16.3 從重用到開(kāi)源 380
16.4 生命中最美好的就是“開(kāi)放” 381
16.5 何處找 384
16.6 使用開(kāi)源軟件的問(wèn)題 385
16.7 許可證問(wèn)題 386
16.7.1 開(kāi)放源碼的資格 386
16.7.2 標(biāo)準(zhǔn)開(kāi)放源碼許可證 388
16.7.3 何時(shí)需要律師 390
Part IV 391
第17章 可移植性:軟件可移植性與遵循標(biāo)準(zhǔn) 393
17.1 C語(yǔ)言的演化 394
17.1.1 早期的C語(yǔ)言 395
17.1.2 C 語(yǔ)言標(biāo)準(zhǔn) 396
17.2 Unix 標(biāo)準(zhǔn) 398
17.2.1 標(biāo)準(zhǔn)和Unix之戰(zhàn) 398
17.2.2 慶功宴上的幽靈 401
17.2.3 開(kāi)源世界的Unix標(biāo)準(zhǔn) 402
17.3 IETF和RFC標(biāo)準(zhǔn)化過(guò)程 403
17.4 規(guī)格DNA,代碼RNA 405
17.5 可移植性編程 408
17.5.1 可移植性和編程語(yǔ)言選擇 409
17.5.2 避免系統(tǒng)依賴(lài)性 412
17.5.3 移植工具 413
17.6 國(guó)際化 413
17.7 可移植性、開(kāi)放標(biāo)準(zhǔn)以及開(kāi)放源碼 414
第18章 文檔:向網(wǎng)絡(luò)世界闡釋代碼 417
18.1 文檔概念 418
18.2 Unix風(fēng)格 420
18.2.1 大文檔偏愛(ài) 420
18.2.2 文化風(fēng)格 421
18.3 各種Unix文檔格式 422
18.3.1 troff和Documenter's Workbench Tools 422
18.3.2 TEX 424
18.3.3 Texinfo 425
18.3.4 POD 425
18.3.5 HTML 426
18.3.6 DocBook 426
18.4 當(dāng)前的混亂和可能的出路 426
18.5 DocBook 427
18.5.1 文檔類(lèi)型定義 427
18.5.2 其它DTD 428
18.5.3 DocBook 工具鏈 429
18.5.4 移植工具 431
18.5.5 編輯工具 432
18.5.6 相關(guān)標(biāo)準(zhǔn)和實(shí)踐 433
18.5.7 SGML 433
18.5.8 XML-DocBook 參考書(shū)籍 433
18.6 編寫(xiě)Unix文檔的最佳實(shí)踐 434
第19章 開(kāi)放源碼:在Unix新社區(qū)中編程 437
19.1 Unix和開(kāi)放源碼 438
19.2 與開(kāi)源開(kāi)發(fā)者協(xié)同工作的最佳實(shí)踐 440
19.2.1 良好的修補(bǔ)實(shí)踐 440
19.2.2 良好的項(xiàng)目、檔案文件命名實(shí)踐 444
19.2.3 良好的開(kāi)發(fā)實(shí)踐 447
19.2.4 良好的發(fā)行制作實(shí)踐 450
19.2.5 良好的交流實(shí)踐 454
19.3 許可證的邏輯:如何挑選 456
19.4 為什么應(yīng)使用某個(gè)標(biāo)準(zhǔn)許可證 457
19.5 各種開(kāi)源許可證 457
19.5.1 MIT或者X Consortium許可證 457
19.5.2 經(jīng)典BSD許可證 457
19.5.3 Artistic許可證 458
19.5.4 通用公共許可證 458
19.5.5 Mozilla 公共許可證 459
第20章 未來(lái):危機(jī)與機(jī)遇 461
20.1 Unix傳統(tǒng)中的必然和偶然 461
20.2 Plan 9:未來(lái)之路 464
20.3 Unix設(shè)計(jì)中的問(wèn)題 466
20.3.1 Unix文件就是一大袋字節(jié) 466
20.3.2 Unix對(duì)GUI的支持孱弱 467
20.3.3 文件刪除不可撤銷(xiāo) 468
20.3.4 Unix假定文件系統(tǒng)是靜態(tài)的 469
20.3.5 作業(yè)控制設(shè)計(jì)拙劣 469
20.3.6 Unix API 沒(méi)有使用異常 470
20.3.7 ioctl(2)和fcntl(2)是個(gè)尷尬 471
20.3.8 Unix安全模型可能太過(guò)原始 471
20.3.9 Unix名字種類(lèi)太多 472
20.3.10 文件系統(tǒng)可能有害論 472
20.3.11 朝向全局互聯(lián)網(wǎng)地址空間 472
20.4 Unix的環(huán)境問(wèn)題 473
20.5 Unix文化中的問(wèn)題 475
20.6 信任的理由 477
附錄A 縮寫(xiě)詞表 479
附錄B 參考文獻(xiàn) 483
附錄C 貢獻(xiàn)者 495
附錄D 無(wú)根的根:無(wú)名師的Unix心傳 499
Colophon 510
索引 511
更多免費(fèi)文檔資料下載,敬請(qǐng)關(guān)注東坡下載站!
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版