《UNIX系統編程: 通信、並發與執行緒》是2018年電子工業出版社出版的圖書,作者是【美】Kay Robbins,Steve Robbins。
基本介紹
- 中文名:UNIX系統編程: 通信、並發與執行緒
- 作者:【美】Kay Robbins、Steve Robbins
- 出版時間:2018年5月
- 出版社:電子工業出版社
- 頁數:896 頁
- ISBN:9787121340352
- 定價:198 元
- 開本:16 開
- 裝幀:平裝
內容簡介,目錄,
內容簡介
《UNIX系統編程: 通信、並發與執行緒》是一本基於最新UNIX標準的完備的參考書,對UNIX編程的要點進行了清晰易懂的介紹,從一些用於說明如何使用系統調用的短小代碼段開始,逐漸過渡到能幫助讀者擴展自己技能水平的實際項目中。《UNIX系統編程: 通信、並發與執行緒》中對通信、並發和執行緒問題進行了深入探討,對複雜的概念(如信號和並發)進行了全面且清晰的解釋,還覆蓋了與檔案、信號、信號量、POSIX執行緒和客戶機-伺服器通信相關的內容。《UNIX系統編程: 通信、並發與執行緒》中不僅提供了大量實例和練習,還專門設計了有針對性的項目並給出了參考答案。本書分為4部分,每部分都包含主題章節和項目章節。《UNIX系統編程: 通信、並發與執行緒》在"第一部分:基礎知識”中介紹了UNIX作業系統的基礎知識,包括檔案、進程和特殊檔案等;"第二部分:異步事件”主要介紹了信號和定時...(展開全部) 《UNIX系統編程: 通信、並發與執行緒》是一本基於最新UNIX標準的完備的參考書,對UNIX編程的要點進行了清晰易懂的介紹,從一些用於說明如何使用系統調用的短小代碼段開始,逐漸過渡到能幫助讀者擴展自己技能水平的實際項目中。《UNIX系統編程: 通信、並發與執行緒》中對通信、並發和執行緒問題進行了深入探討,對複雜的概念(如信號和並發)進行了全面且清晰的解釋,還覆蓋了與檔案、信號、信號量、POSIX執行緒和客戶機-伺服器通信相關的內容。《UNIX系統編程: 通信、並發與執行緒》中不僅提供了大量實例和練習,還專門設計了有針對性的項目並給出了參考答案。本書分為4部分,每部分都包含主題章節和項目章節。《UNIX系統編程: 通信、並發與執行緒》在"第一部分:基礎知識”中介紹了UNIX作業系統的基礎知識,包括檔案、進程和特殊檔案等;"第二部分:異步事件”主要介紹了信號和定時器;"第三部分:並發”主要介紹了信號量和進程同步的相關內容;"第四部分:通信”則主要介紹通信的相關話題。其中,“第一部分:基礎知識”是本書其餘部分的基礎,讀者在閱讀完第一部分後,就可以以任意順序閱讀本書其他部分的相關內容。 Kay Robbins 和 Steve Robbins,是美國麻省理工學院博士,現任德州大學聖安東尼奧分校計算機科學系講師。《UNIX系統編程: 通信、並發與執行緒》(UNIX Systems Programming: Communication, Concurrency and Threads)是他們的代表作。 譯者師蓉,譯有《完美Java(第6版)》、《信息架構:大型網站Web設計(第4版)》《像富人一樣思考》《故事場景摩天樓》《網際網路領導思維》《斷點:網際網路進化啟示錄》《Unity 3.x遊戲開發實例》《iPhone套用用戶體驗設計實戰與案例》《社交網站界面設計》等書。
目錄
第一部分 基礎知識
第1章 技術對程式的影響 3
1.1?術語的變化 3
1.2?時間和速度 5
1.3?多道程式設計和分時 6
1.4?套用層的並發 8
1.4.1?中斷 8
1.4.2?信號 9
1.4.3?輸入和輸出 10
1.4.4?進程、執行緒和資源共享 10
1.4.5?具有共享記憶體的多個處理器 11
1.4.6?網路作為計算機 11
1.5?安全和容錯 12
1.6?非法入侵造成的緩衝區溢出 13
1.6.1?緩衝區溢出的後果 14
1.6.2?緩衝區溢出和安全 16
1.7?UNIX標準 17
1.8?延伸閱讀 19
第2章 程式、執行緒和進程 21
2.1?程式是如何成為進程的 21
2.2?執行緒和執行執行緒 22
2.3?程式映象的布局 23
2.4?庫函式調用 26
2.5?函式返回值和錯誤 29
2.6?參數數組 31
2.6.1?用makeargv函式創建一個數組 32
2.6.2?makeargv函式的實現 34
2.7?執行緒安全函式 38
2.8?靜態變數的使用 40
2.9?靜態對象的結構 42
2.10?進程環境 48
2.11?進程終止 51
2.12?練習:一個env實用程式 54
2.13?練習:訊息日誌 55
2.14?延伸閱讀 57
第3章 UNIX中的進程 58
3.1?進程標識符 58
3.2?進程狀態 60
3.3?UNIX 進程創建和fork函式 63
3.4?wait函式 70
狀態值 76
3.5?exec函式 77
3.6?後台進程和守護進程 83
3.7?臨界區 86
3.8?練習:進程鏈 87
3.9?練習:進程扇 88
3.10?延伸閱讀 89
第4章 UNIX I/O 90
4.1?設備術語 90
4.2?讀/寫 91
4.3?打開和關閉檔案 102
4.4?select函式 107
4.5?poll函式 116
4.6?檔案表示 119
4.6.1?檔案描述符 119
4.6.2?檔案指針和緩衝 122
4.6.3?檔案描述符的繼承 124
4.7?過濾器和重定向 128
4.8?檔案控制 132
4.9?練習:原子日誌 135
原子日誌庫 139
4.10?練習:cat實用程式 141
4.11?延伸閱讀 143
第5章 檔案和目錄 144
5.1?UNIX檔案系統導航 144
5.1.1?當前工作目錄 145
5.1.2?搜尋路徑 150
5.2?目錄訪問 151
5.2.1?訪問檔案狀態信息 153
5.2.2?確定檔案的類型 156
5.3?UNIX檔案系統實現 157
5.3.1?UNIX檔案實現 158
5.3.2?目錄實現 161
5.4?硬連結和符號連結 161
5.4.1?創建或刪除一個連結 162
5.4.2?創建和刪除符號連結 167
5.5?練習:which命令 172
5.6?練習:郵件通知程式 173
5.7?練習:新聞通知程式 176
5.8?練習:遍歷目錄 177
5.9?延伸閱讀 179
第6章 UNIX特殊檔案 180
6.1?管道 180
6.2?流水線 184
6.3?FIFO 189
6.4?管道與客戶機-伺服器模型 193
6.5?終端控制 200
規範和非規範的輸入處理 208
6.6?音頻設備 212
6.7?練習:音頻 218
6.8?練習:屏障 220
6.9?練習:stty命令 221
6.10?練習:重提客戶機-伺服器 222
6.11?延伸閱讀 222
第7章 項目:令牌環 224
7.1?環形拓撲 224
7.2?環的形成 226
7.3?環的探討 232
7.4?簡單通信 234
7.5?用令牌環實現互斥 235
7.6?用投票實現互斥 237
7.7?匿名環中的領導者選舉 238
7.8?用於通信的令牌環 240
7.9?流水線預處理機 242
7.10?並行環算法 244
7.10.1?圖像過濾 244
7.10.2?矩陣乘法 247
7.11?彈性環 248
7.12?延伸閱讀 249
第二部分?異步事件
第8章 信號 253
8.1?信號的基本概念 253
8.2?信號的產生 254
8.3?對信號掩碼和信號集進行操作 259
8.4?捕獲和忽略信號—sigaction 266
8.5?等待信號—pause、sigsuspend和sigwait 272
8.5.1?pause函式 272
8.5.2?sigsuspend函式 274
8.5.3?sigwait函式 282
8.6?處理信號:錯誤和異步信號安全 283
8.7?用siglongjmp和sigsetjmp進行程式控制 286
8.8?使用異步I/O編程 288
8.9?練習:轉儲統計 300
8.10?練習:同時處理慢速設備 301
8.11?延伸閱讀 301
第9章 時間和定時器 303
9.1?POSIX時間 303
9.1.1?用從Epoch開始的秒數表示時間 304
9.1.2?顯示日期和時間 305
9.1.3?使用struct timeval表示時間 308
9.1.4?使用實時時鐘 311
9.1.5?耗時和處理器時間的對比 313
9.2?睡眠函式 316
9.3?POSIX:XSI間隔定時器 319
9.4?實時信號 323
9.5?POSIX:TMR間隔定時器 328
9.6?定時器漂移、溢出和絕對時間 333
9.7?延伸閱讀 344
第10章 項目:虛擬定時器 345
10.1?項目概述 345
10.2?簡單的定時器 348
10.3?對5個定時器中的一個進行設定 351
10.3.1?virtualtimers對象 351
10.3.2?hardwaretimer對象 353
10.3.3?主程式實現 354
10.3.4?用show譜寫定時器代碼 355
10.4?使用多個定時器 361
10.4.1?設定多個定時器 364
10.4.2?用多個定時器進行測試 365
10.5?多定時器的健壯實現 369
10.6?POSIX:TMR定時器的實現 371
10.7?一個小型的cron工具mycron 372
10.8?延伸閱讀 372
第11章 項目:破解shell 373
11.1?構建一個簡單的shell 373
11.2?重定向 378
11.3?流水線 382
11.4?前台的信號處理 385
11.5?進程組、會話和控制終端 391
11.5.1?進程組 391
11.5.2?會話 393
11.6?ush中的後台進程 396
11.7?作業控制 403
11.8?ush的作業控制 407
11.8.1?一個作業列表對象 407
11.8.2?ush中的作業列表 409
11.8.3?ush中的作業控制 409
11.8.4?等待流水線時的進程行為 410
11.9?延伸閱讀 411
第三部分?並?發
第12章 POSIX執行緒 415
12.1?監視檔案描述符的方法 415
12.2?使用執行緒監視多個檔案描述符 417
12.3?執行緒管理 420
12.3.1?用ID引用執行緒 421
12.3.2?創建一個執行緒 422
12.3.3?分離和連線 423
12.3.4?退出和取消 426
12.3.5?向執行緒傳遞參數並返回值 429
12.4?執行緒安全 438
12.5?用戶級執行緒 VS 核心級執行緒 439
12.6?執行緒屬性 442
12.6.1?執行緒狀態 443
12.6.2?執行緒棧 444
12.6.3?執行緒調度 446
12.7?練習:並行檔案複製 450
12.8?延伸閱讀 451
第13章?執行緒同步 452
13.1?POSIX同步函式 452
13.2?互斥鎖 453
13.2.1?創建並初始化一個互斥量 454
13.2.2?銷毀一個互斥量 455
13.2.3?鎖定和解鎖互斥量 456
13.2.4?保護不安全的庫函式 458
13.2.5?同步標誌和全局值 459
13.2.6?讓數據結構成為執行緒安全的 465
13.3?最多一次和至少一次的執行 467
13.4?條件變數 471
13.4.1?條件變數的創建和銷毀 473
13.4.2?等待並通知條件變數 475
13.5?信號處理和執行緒 478
13.5.1?將信號定向到一個特定的執行緒中 479
13.5.2?為執行緒禁止信號 480
13.5.3?信號處理的專用執行緒 480
13.6?讀者和寫者 484
13.7?strerror_r實現 489
13.8?死鎖和其他討厭的問題 491
13.9?練習:多個屏障 492
13.10?延伸閱讀 492
第14章?臨界區和信號量 493
14.1?臨界區的處理 493
14.2?信號量 496
14.3?POSIX:SEM匿名信號量 499
14.4?POSIX:SEM信號量操作 501
14.5?POSIX:SEM命名信號量 508
14.5.1?創建並打開命名信號量 509
14.5.2?關閉信號量並刪除其連結 512
14.6?練習:許可管理器 514
14.6.1?license對象 515
14.6.2?runsim主程式 515
14.6.3?對許可管理器的擴展 516
14.7?延伸閱讀 516
第15章?POSIX IPC 517
15.1?POSIX:XSI進程間通信 517
15.1.1?標識並訪問IPC對象 518
15.1.2?在shell中訪問POSIX:XSI IPC資源 519
15.2?POSIX:XSI信號量集 520
15.2.1?信號量的創建 521
15.2.2?信號量的控制 523
15.2.3?POSIX信號量集操作 525
15.3?POSIX:XSI共享記憶體 532
15.3.1?訪問共享記憶體段 532
15.3.2?共享記憶體段的連線和分離 533
15.3.3?控制共享記憶體 534
15.3.4?共享記憶體示例 535
15.4?POSIX:XSI訊息佇列 541
訪問訊息佇列 542
15.5?練習:POSIX匿名信號量 549
15.6?練習:POSIX命名信號量 550
15.7?練習:用共享記憶體實現管道 551
15.8?練習:用訊息佇列實現管道 554
15.9?延伸閱讀 554
第16章?項目:生產者-消費者同步 555
16.1?生產者-消費者問題 555
16.2?受互斥鎖保護的有界緩衝區 557
16.3?使用信號量的緩衝區實現 560
16.4?一個簡單的生產者-消費者問題簡介 566
16.5?使用條件變數的有界緩衝區 570
16.6?帶有完成條件的緩衝區 571
16.7?並行檔案複製 580
16.7.1?並行檔案複製的生產者 580
16.7.2?並行檔案複製的消費者 581
16.7.3?並行檔案複製的main程式 582
16.7.4?並行檔案複製的增強 582
16.8?執行緒化列印伺服器 583
16.8.1?請求緩衝區 584
16.8.2?生產者執行緒 585
16.8.3?消費者執行緒 586
16.8.4?列印伺服器 586
16.8.5?其他增強功能 586
16.9?延伸閱讀 587
第17章?項目:非完全並行虛擬機 588
17.1?PVM的歷史、術語和結構 588
17.2?非完全並行虛擬機 591
17.3?NTPVM項目概述 593
17.3.1?NEWTASK分組 596
17.3.2?DATA分組 596
17.3.3?DONE分組 597
17.4?調度程式的I/O和測試 598
17.4.1?用多個視窗測試 604
17.4.2?用遠程日誌測試 605
17.5?沒有輸入的單任務 607
17.6?順序任務 608
17.6.1?輸入執行緒 609
17.6.2?輸出執行緒 610
17.7?並發任務 611
17.8?分組通信、廣播和屏障 611
17.9?終止和信號 612
17.10?有序的訊息傳遞 613
17.11?延伸閱讀 613
第四部分?通?信
第18章?面向連線的通信 617
18.1?客戶機-伺服器模型 617
18.2?通信信道 618
18.3?面向連線的伺服器策略 622
18.4?通用網際網路通信接口(UICI) 625
18.4.1?處理錯誤 627
18.4.2?讀和寫 627
18.5?不同伺服器策略的UICI實現 628
18.6?UICI客戶機 631
18.7?UICI的套接字實現 637
18.7.1?socket函式 638
18.7.2?bind函式 639
18.7.3?listen函式 641
18.7.4?u_open函式的實現 642
18.7.5?accept函式 643
18.7.6?u_accept函式的實現 645
18.7.7?connect函式 646
18.7.8?u_connect函式的實現 647
18.8?主機名和IP位址 649
18.9?執行緒安全的UICI 658
18.10?練習:ping伺服器 661
18.11?練習:音頻的傳輸 662
18.12?延伸閱讀 664
第19章?項目:WWW重定向 665
19.1?全球資訊網 665
19.2?統一資源定位符(URL) 666
19.3?HTTP入門 668
19.3.1?客戶端請求 669
19.3.2?伺服器回響 669
19.3.3?HTTP訊息交換 670
19.4?Web通信模式 673
19.4.1?隧道 673
19.4.2?代理 674
19.4.3?高速快取和透明性 676
19.4.4?網關 678
19.5?單連線的通過型監控 679
19.6?隧道伺服器的實現 682
19.7?用於測試的伺服器驅動程式 682
19.8?HTTP頭解析 684
19.9?簡單的代理伺服器 686
19.10?代理監視器 688
19.11?代理高速快取 691
19.12?入口網站的網關 692
19.13?用於負載平衡的網關 692
19.14?事後的調查分析 693
19.14.1?執行緒和計時錯誤 693
19.14.2?未捕獲的錯誤和錯誤的退出 694
19.14.3?書寫風格和表示 695
19.14.4?糟糕的測試和結果表示 696
19.14.5?編程錯誤和不好的風格 697
19.15?延伸閱讀 698
第20章?無連線通信和多播 699
20.1?無連線通信簡介 699
20.2?無連線通信的簡化接口 701
20.2.1?主機名和u_buf_t結構 703
20.2.2?UICI UDP的返回錯誤 703
20.2.3?UDP緩衝區大小和UICI UDP 703
20.3?簡單-請求協定 704
20.4?請求-應答協定 710
20.5?有逾時和重試的請求-應答 716
20.6?請求-應答-確認協定 722
20.7?UICI UDP的實現 723
20.7.1?u_openudp函式的實現 723
20.7.2?sendto函式 725
20.7.3?u_sendto和 u_sendtohost函式的實現 726
20.7.4?recvfrom函式 727
20.7.5?u_recvfrom和u_recvfromtimed函式的實現 728
20.7.6?主機名和u_buf_t 730
20.8?UDP和TCP的比較 732
20.9?多播 733
20.9.1?多播定址 733
20.9.2?u_join函式的實現 735
20.9.3?u_leave函式的實現 736
20.10?練習:UDP連線埠伺服器 737
20.11?練習:無狀態檔案伺服器 738
遠程檔案服務 739
20.12?延伸閱讀 740
第21章?項目:網際網路廣播 741
21.1?項目概述 741
21.2?音頻設備模擬 744
21.3?具有一個節目和一個接收者的UDP實現 744
21.3.1?簡單實現 744
21.3.2?接收者的終止 747
21.3.3?接收者緩衝來處理網路延遲 748
21.3.4?接收者緩衝來處理亂序傳遞 751
21.4?具有多個節目和接收者的UDP實現 754
21.4.1?多個節目和單個接收者 754
21.4.2?多個節目和多個接收者 755
21.5?音頻廣播的UDP實現 756
21.6?無線電廣播的多播實現 758
21.7?TCP實現的差異 758
21.7.1?單個節目和單個接收者的TCP實現 759
21.7.2?多個節目和單個接收者的TCP實現 760
21.7.3?無線電廣播的TCP實現 761
21.8?通過瀏覽器接收流式音頻 764
21.8.1?使用瀏覽器助手應用程式 764
21.8.2?在你的Web伺服器中設定一種新的mime類型 765
21.8.3?設定你的瀏覽器來處理新的mime類型 766
21.8.4?創建Web頁面 766
21.8.5?使用預定義的mime類型 767
21.9?延伸閱讀 767
第22章?項目:伺服器性能 769
22.1?伺服器性能成本 769
22.2?伺服器架構 770
22.3?項目概述 774
22.4?單客戶端驅動程式 775
22.4.1?處理一個連線 775
22.4.2?對回響進行編程 776
22.4.3?收集統計信息 777
22.4.4?測試客戶端 777
22.5?多客戶端驅動程式 778
另一種多客戶端設計 781
22.6?實現每個請求一個執行緒和每個請求一個進程 781
22.7?執行緒工作者池策略 782
22.8?使用有界緩衝區的多執行緒工作者池 782
22.9?進程工作者池 783
22.10?磁碟I/O的影響 783
22.11?性能研究 787
22.11.1?基線測量 787
22.11.2?波動性的根源 788
22.11.3?測量錯誤 789
22.11.4?同步 792
22.11.5?普通的錯誤 793
22.11.6?要測量什麼 794
22.11.7?數據分析和表示 796
22.12?報告撰寫 797
22.12.1?引言 797
22.12.2?設計、實現和測試 798
22.12.3?實驗 798
22.12.4?結果和分析 799
22.12.5?結論 799
22.12.6?參考文獻 799
22.13?延伸閱讀 800
附錄A?UNIX基礎 801
附錄B?重啟庫 819
附錄C?UICI實現 829
附錄D?日誌函式 846
附錄E?POSIX擴展 864
參考文獻 867