編輯推薦
適讀人群 :本書適閤作為高等院校計算機專業的教材,也可供軟件開發人員參考使用。 讀者將通過本書學習如何設計並實現在LinuxTM、SolarisTM、Mac OS X或其他基於POSIX的係統中都可靠的UNIX軟件。本書演示如何設計能讓UNIX操作係統發揮*緻功效的復雜軟件。本書對UNIX編程的要點進行瞭清晰易懂的介紹,內容從如何使用係統調用的小代碼段開始,很快過渡到能幫助讀者擴展自己技能水平的實際項目。本書對通信、並發和多綫程進行瞭深入探討,對復雜概念進行瞭全麵且清晰的解釋,例如信號和並發,並以此為特色。此外,本書還提供瞭實例、練習、可重用的代碼和用於網絡通信應用程序的簡化庫。本書還是基於新UNIX標準的獨立參考書,它完全覆蓋瞭與文件、信號、信號量、POSIX綫程和客戶機-服務器通信相關的內容。本書的特色還在於增加瞭關於Web、UDP和服務器性能的新章節。書中相關資料已經經過瞭大量的課堂測試。主要內容包括:
◎UNIX進程、文件和特殊文件
◎信號和定時器
◎POSIX綫程、信號量和IPC
◎TCP、UDP、組播和Web
◎關於因特網電颱、服務器性能、定時器、Web緩存和命令解釋程序的特色項目
內容簡介
本書是基於新UNIX標準的完備參考書,對UNIX編程要點進行清晰易懂的介紹,從說明係統調用的短小代碼段開始,逐漸過渡到用於技能提升的實際項目。作者深入探討通信、並發和綫程問題,對復雜概念(如信號和並發)進行全麵解讀,覆蓋文件、信號、信號量、POSIX綫程和客戶機-服務器通信等內容;提供大量實例、練習,以及針對性項目及其參考答案。全書第一部分介紹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.7UNIX標準 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.2makeargv函數的實現 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.3UNIX 進程創建和fork函數 63
3.4wait函數 70
狀態值 76
3.5exec函數 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.4select函數 107
4.5poll函數 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.1UNIX文件係統導航 144
5.1.1當前工作目錄 145
5.1.2搜索路徑 150
5.2目錄訪問 151
5.2.1訪問文件狀態信息 153
5.2.2確定文件的類型 156
5.3UNIX文件係統實現 157
5.3.1UNIX文件實現 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.3FIFO 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.1pause函數 272
8.5.2sigsuspend函數 274
8.5.3sigwait函數 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.1POSIX時間 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.3POSIX:XSI間隔定時器 319
9.4實時信號 323
9.5POSIX:TMR間隔定時器 328
9.6定時器漂移、溢齣和絕對時間 333
9.7延伸閱讀 344
第10章 項目:虛擬定時器 345
10.1項目概述 345
10.2簡單的定時器 348
10.3對5個定時器中的一個進行設置 351
10.3.1virtualtimers對象 351
10.3.2hardwaretimer對象 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.6POSIX: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.6ush中的後颱進程 396
11.7作業控製 403
11.8ush的作業控製 407
11.8.1一個作業列錶對象 407
11.8.2ush中的作業列錶 409
11.8.3ush中的作業控製 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.1POSIX同步函數 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.7strerror_r實現 489
13.8死鎖和其他討厭的問題 491
13.9練習:多個屏障 492
13.10延伸閱讀 492
第14章臨界區和信號量 493
14.1臨界區的處理 493
14.2信號量 496
14.3POSIX:SEM匿名信號量 499
14.4POSIX:SEM信號量操作 501
14.5POSIX:SEM命名信號量 508
14.5.1創建並打開命名信號量 509
14.5.2關閉信號量並刪除其鏈接 512
14.6練習:許可管理器 514
14.6.1license對象 515
14.6.2runsim主程序 515
14.6.3對許可管理器的擴展 516
14.7延伸閱讀 516
第15章POSIX IPC 517
15.1POSIX:XSI進程間通信 517
15.1.1標識並訪問IPC對象 518
15.1.2在shell中訪問POSIX:XSI IPC資源 519
15.2POSIX:XSI信號量集 520
15.2.1信號量的創建 521
15.2.2信號量的控製 523
15.2.3POSIX信號量集操作 525
15.3POSIX:XSI共享內存 532
15.3.1訪問共享內存段 532
15.3.2共享內存段的連接和分離 533
15.3.3控製共享內存 534
15.3.4共享內存示例 535
15.4POSIX: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.1PVM的曆史、術語和結構 588
17.2非完全並行虛擬機 591
17.3NTPVM項目概述 593
17.3.1NEWTASK分組 596
17.3.2DATA分組 596
17.3.3DONE分組 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.6UICI客戶機 631
18.7UICI的套接字實現 637
18.7.1socket函數 638
18.7.2bind函數 639
18.7.3listen函數 641
18.7.4u_open函數的實現 642
18.7.5accept函數 643
18.7.6u_accept函數的實現 645
18.7.7connect函數 646
18.7.8u_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.3HTTP入門 668
19.3.1客戶端請求 669
19.3.2服務器響應 669
19.3.3HTTP消息交換 670
19.4Web通信模式 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.8HTTP頭解析 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.2UICI UDP的返迴錯誤 703
20.2.3UDP緩衝區大小和UICI UDP 703
20.3簡單-請求協議 704
20.4請求-應答協議 710
20.5有超時和重試的請求-應答 716
20.6請求-應答-確認協議 722
20.7UICI UDP的實現 723
20.7.1u_openudp函數的實現 723
20.7.2sendto函數 725
20.7.3u_sendto和 u_sendtohost函數的實現 726
20.7.4recvfrom函數 727
20.7.5u_recvfrom和u_recvfromtimed函數的實現 728
20.7.6主機名和u_buf_t 730
20.8UDP和TCP的比較 732
20.9多播 733
20.9.1多播尋址 733
20.9.2u_join函數的實現 735
20.9.3u_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接收者的終止
UNIX係統編程: 通信、並發與綫程 epub pdf mobi txt 電子書 下載 2024
UNIX係統編程: 通信、並發與綫程 下載 epub mobi pdf txt 電子書