內容簡介
本書是一部UNIX網路編程的經典之作。進程間通信(IPC)幾乎是所有Unix程式性能的關鍵,理解IPC也是理解如何開發不同主機間網路應用程式的必要條件。本書從對Posix IPC和System V IPC的內部結構開始討論,全面深入地介紹了4種IPC形式:訊息傳遞(管道、FIFO、訊息佇列)、同步(互斥鎖、條件變數、讀寫鎖、檔案與記錄鎖、信號量)、共享記憶體(榜員訂匿名共享記憶體、具名共享記憶體)及遠程過程調用(Solaris 門、Sun RPC)。附錄中給出了測量各種 IPC形式性能的歸辨趨方法。
本書內容詳盡,幾乎每章都提供精選的習題,並提供境拒市禁了部分習題的答案,是網路研究和開發人員理想的參考書。
圖書目錄
Part 1 Introduction / 簡介 1
Chapter 1. Introduction / 簡介 3
1.1 Introduction / 概述 3
1.2 Processes, Threads, and the Sharing of Information / 進程、執行緒與信息共享 5
1.3 Persistence of IPC Objects / IPC對象的持續性 6
1.4 Name Spaces / 名字空間 7
1.5 Effect of fork, exec, and exit on IPC / Objects fork、exec和exit對IPC對象的影響 9
1.6 Error Handling: Wrapper Functions / 錯誤處理:包裝函式 11
1.7 Unix Standards / Unix標準 13
1.8 Road Map to IPC Examples in the Text / 本書中IPC示例的路線圖 15
1.9 Summary / 小結 16
Chapter 2. Posix IPC 19
2.1 Introduction / 概述 19
2.2 IPC Names / IPC名字 19
2.3 Creating and Opening IPC Channels / 創建與打開IPC通道 22
2.4 IPC Permissions / IPC許可權 25
2.5 Summary / 小結 26
Chapter 3. System V IPC 27
3.1 Introduction / 概述 27
3.2 key_t Keys and ftok Function / key_t鍵和ftok函式 28
3.3 ipc_perm Structure / ipc_perm結構 30
3.4 Creating and Opening IPC Channels / 創建與打開IPC通道 30
3.5 IPC Permissions / IPC許可權 32
3.6 Identifier Reuse / 標識符重用 34
3.7 ipcs and ipcrm Programs / ipcs和ipcrm程乎海蒸序 36
3.8 Kernel Limits / 核心限制 36
3.99 Summary / 小結 38
Part 2 Message Passing / 訊息傳遞船汽 41
Chapter 4. Pipes and FIFOs / 管道和FIFO 43
4.1 Introduction / 概述 43
4.2 A Simple Client-Server Example / 一個簡單的客戶-伺服器示例 43
4.3 Pipes / 管道 44
4.4 Full-Duplex Pipes / 全雙工管道 50
4.5 popen and pclose Functions / popen和pclose函式阿戲嚷和 52
4.6 FIFOs 54
4.7 Additional Properties of Pipes and FIFOs / 管道和FIFO的額外屬性 58
4.8 One Server, Multiple Clients / 單伺服器,多客戶 60
4.9 Iterative versus Concurrent Servers / 疊代伺服器與並發伺服器的比較 66
4.10 Streams and Messages / 流與訊息 67
4.11 Pipe and FIFO Limits / 管道少烏立和FIFO限制 72
4.12 Summary / 小結 73
Chapter 5. Posix Message Queues / Posix訊息佇列 75
5.1 Introduction / 概述 75
5.2 mq_open, mq_close, and mq_unlink Functions / mq_open、mq_close和mq_unlink函式 76
5.3 mq_getattr and mq_setattr Functions / mq_getattr和mq_setattr函式 79
5.4 mq_send and mq_receive Functions / mq_send和mq_receive函式 82
5.5 Message Queue Limits / 訊息佇列限制 86
5.6 mq_notify Function / mq_notify函式 87
5.7 Posix Realtime Signals / Posix實時信號 98
5.8 Implementation Using Memory-Mapped I/O / 使用記憶體映射I/O實現 106
5.9 Summary / 小結 126
Chapter 6. System V Message Queues / System V訊息佇列 129
6.1 Introduction / 概述 129
6.2 msgget Function / msgget函式 130
6.3 msgsnd Function / msgsnd函式 131
6.4 msgrcv Function / msgrcv函式 132
6.5 msgctl Function / msgctl函式 134
6.6 Simple Programs / 簡單的程式 135
6.7 Client-Server Example / 客戶-伺服器示例 140
6.8 Multiplexing Messages / 多路復用訊息 142
6.9 Message Queues with select and poll / 訊息佇列上使用select和poll 151
6.10 Message Queue Limits / 訊息佇列限制 152
6.11 Summary / 小結 155
Part 3 Synchronization / 同步 157
Chapter 7. Mutexes and Condition Variables / 互斥鎖和條件變數 159
7.1 Introduction / 概述 159
7.2 Mutexes: Locking and Unlocking / 互斥鎖:加鎖與解鎖 159
7.3 Producer-Consumer Problem / 生產者-消費者問題 161
7.4 Locking versus Waiting / 加鎖與等待 165
7.5 Condition Variables: Waiting and Signaling / 條件變數:等待與信號傳送 167
7.6 Condition Variables: Timed Waits and Broadcasts / 條件變數:定時等待和廣播 171
7.7 Mutexes and Condition Variable Attributes / 互斥鎖和條件變數的屬性 172
7.8 Summary / 小結 174
Chapter 8. Read-Write Locks / 讀寫鎖 177
8.1 Introduction / 概述 177
8.2 Obtaining and Releasing Read-Write Locks / 獲取與釋放讀寫鎖 178
8.3 Read-Write Lock Attributes / 讀寫鎖屬性 179
8.4 Implementation Using Mutexes and Condition Variables / 使用互斥鎖和條件變數實現 179
8.5 Thread Cancellation / 執行緒取消 187
8.6 Summary / 小結 192
Chapter 9. Record Locking / 記錄加鎖 193
9.1 Introduction / 概述 193
9.2 Record Locking versus File Locking / 記錄加鎖與檔案加鎖 197
9.3 Posix fcntl Record Locking /Posix fcntl記錄加鎖 199
9.4 Advisory Locking / 勸告性加鎖 203
9.5 Mandatory Locking / 強制性加鎖 204
9.6 Priorities of Readers and Writers / 讀出者和寫入者的優先權 207
9.7 Starting Only One Copy of a Daemon / 只啟動守護進程的一個副本 213
9.8 Lock Files / 鎖檔案 214
9.9 NFS Locking / NFS加鎖 216
9.10 Summary / 小結 216
Chapter 10. Posix Semaphores / Posix信號量 219
10.1 Introduction / 概述 219
10.2 sem_open, sem_close, and sem_unlink Functions / sem_open、sem_close和sem_unlink函式 225
10.3 sem_wait and sem_trywait Functions / sem_wait和sem_trywait函式 226
10.4 sem_post and sem_getvalue Functions / sem_post和sem_getvalue函式 227
10.5 Simple Programs / 簡單的程式 228
10.6 Producer-Consumer Problem / 生產者-消費者問題 233
10.7 File Locking / 檔案加鎖 238
10.8 sem_init and sem_destroy Functions / sem_init和sem_destroy函式 238
10.9 Multiple Producers, One Consumer / 多生產者,單消費者 242
10.10 Multiple Producers, Multiple Consumers / 多生產者,多消費者 245
10.11 Multiple Buffers / 多緩衝區 249
10.12 Sharing Semaphores between Processes / 進程間共享信號量 256
10.13 Semaphore Limits / 信號量限制 257
10.14 Implementation Using FIFOs / 使用FIFO實現 257
10.15 Implementation Using Memory-Mapped I/O / 使用記憶體映射I/O實現 262
10.16 Implementation Using System V Semaphores / 使用System V信號量實現 271
10.17 Summary / 小結 278
Chapter 11. System V Semaphores / System V信號量 281
11.1 Introduction / 概述 281
11.2 semget Function / semget函式 282
11.3 semop Function / semop函式 285
11.4 semctlFunction / semctl函式 287
11.5 Simple Programs / 簡單的程式 289
11.6 File Locking / 檔案加鎖 294
11.7 Semaphore Limits / 信號量限制 296
11.8 Summary / 小結 300
Part 4 Shared Memory / 共享記憶體 301
Chapter 12. Shared Memory Introduction / 共享記憶體簡介 303
12.1 Introduction / 概述 303
12.2 mmap, munmap, and msync Functions / mmap、munmap和msync函式 307
12.3 Increment Counter in a Memory-Mapped File / 記憶體映射檔案中的計數器遞加 311
12.4 4.4BSD Anonymous Memory Mapping / 4.4BSD匿名記憶體映射 315
12.5 SVR4 /dev/zero Memory Mapping / SVR4 /dev/zero記憶體映射 316
12.6 Referencing Memory-Mapped Objects / 引用記憶體映射的對象 317
12.7 Summary / 小結 322
Chapter 13. Posix Shared Memory / Posix共享記憶體 325
13.1 Introduction / 概述 325
13.2 shm_open and shm_unlink Functions / shm_open和shm_unlink函式 326
13.3 ftruncate and fstat Functions / ftruncate和fstat函式 327
13.4 Simple Programs / 簡單的程式 328
13.5 Incrementing a Shared Counter / 共享計數器遞加 333
13.6 Sending Messages to a Server / 向伺服器傳送訊息 336
13.7 Summary / 小結 342
Chapter 14. System V Shared Memory / System V共享記憶體 343
14.1 Introduction / 概述 343
14.2 shmget Function / shmget函式 343
14.3 shmat Function / shmat函式 344
14.4 shmdt Function / shmdt函式 345
14.5 shmctl Function / shmctl函式 345
14.6 Simple Programs / 簡單的程式 346
14.7 Shared Memory Limits / 共享記憶體限制 349
14.8 Summary / 小結 351
Part 5 Remote Procedure Calls / 遠程過程調用 353
Chapter 15. Doors / 門 355
15.1 Introduction / 概述 355
15.2 door_call Function / door_call函式 361
15.3 door_create Function / door_create函式 363
15.4 door_return Function / door_return函式 364
15.5 door_cred Function / door_cred函式 365
15.6 door_info Function / door_info函式 365
15.7 Examples / 示例 366
15.8 Descriptor Passing / 描述符傳遞 379
15.9 door_server_create Function / door_server_create函式 384
15.10 door_bind, door_unbind, and door_revoke Functions / door_bind、door_unbind和door_revoke函式 390
15.11 Premature Termination of Client or Server / 客戶或伺服器的過早終止 390
15.12 Summary / 小結 397
Chapter 16. Sun RPC 399
16.1 Introduction / 概述 399
16.2 Multithreading / 多執行緒技術 407
16.3 Server Binding / 伺服器綁定 411
16.4 Authentication / 鑑別 414
16.5 Timeout and Retransmission / 逾時和重傳 417
16.6 Call Semantics / 調用語義 422
16.7 Premature Termination of Client or Server / 客戶或伺服器的過早終止 424
16.8 XDR: External Data Representation / XDR:外部數據表示 426
16.9 RPC Packet Formats / RPC分組格式 444
16.10 Summary / 小結 449
Epilogue / 後記 453
Appendix A. Performance Measurements / 性能測量 457
A.1 Introduction / 概述 457
A.2 Results / 結果 458
A.3 Message Passing Bandwidth Programs / 訊息傳遞頻寬程式 467
A.4 Message Passing Latency Programs / 訊息傳遞延遲程式 480
A.5 Thread Synchronization Programs / 執行緒同步程式 486
A.6 Process Synchronization Programs / 進程同步程式 497
Appendix B. A Threads Primer 501
B.1 Introduction / 概述 501
B.2 Basic Thread Functions: Creation and Termination / 基本執行緒函式:創建和終止 502
Appendix C. Miscellaneous Source Code / 其他原始碼 505
C.1 unpipc.h Header / unpipc.h頭檔案 505
C.2 config.h Header / config.h頭檔案 509
C.3 Standard Error Functions / 標準錯誤處理函式 510
Appendix D. Solutions to Selected Exercises / 精選習題答案 515
Bibliography / 參考文獻 535
作者簡介
W. Richard Stevens 國際知名的UNIX和網路專家,備受讚譽的技術作家。他1951年2月5日出生於尚比亞,後隨父母回到美國。中學時就讀於維吉尼亞菲什伯恩軍事學校,1973年獲得密西根大學航空和航天工程學士學位。1975年至1982年,他在亞利桑那州圖森市的基特峰國家天文台從事計算機編程工作,業餘時間喜愛飛行運動,做過兼職飛行教練。這期間他分別在1978年和1982年獲得亞利桑那大學系統工程碩士和博士學位。此後他去康乃狄克州紐哈芬的健康系統國際公司任主管計算機服務的副總裁。1990年他回到圖森,從事專業技術寫作和諮詢工作。寫下了多種經典的傳世之作,包括《TCP/IP詳解》(三卷)、《UNIX環境高級編程》和《UNIX網路編程》(兩卷)。Stevens於1999年9月1日去世,年僅48歲。2000年他被國際機構USENIX追授“終身成就獎”。
3.5 IPC Permissions / IPC許可權 32
3.6 Identifier Reuse / 標識符重用 34
3.7 ipcs and ipcrm Programs / ipcs和ipcrm程式 36
3.8 Kernel Limits / 核心限制 36
3.99 Summary / 小結 38
Part 2 Message Passing / 訊息傳遞 41
Chapter 4. Pipes and FIFOs / 管道和FIFO 43
4.1 Introduction / 概述 43
4.2 A Simple Client-Server Example / 一個簡單的客戶-伺服器示例 43
4.3 Pipes / 管道 44
4.4 Full-Duplex Pipes / 全雙工管道 50
4.5 popen and pclose Functions / popen和pclose函式 52
4.6 FIFOs 54
4.7 Additional Properties of Pipes and FIFOs / 管道和FIFO的額外屬性 58
4.8 One Server, Multiple Clients / 單伺服器,多客戶 60
4.9 Iterative versus Concurrent Servers / 疊代伺服器與並發伺服器的比較 66
4.10 Streams and Messages / 流與訊息 67
4.11 Pipe and FIFO Limits / 管道和FIFO限制 72
4.12 Summary / 小結 73
Chapter 5. Posix Message Queues / Posix訊息佇列 75
5.1 Introduction / 概述 75
5.2 mq_open, mq_close, and mq_unlink Functions / mq_open、mq_close和mq_unlink函式 76
5.3 mq_getattr and mq_setattr Functions / mq_getattr和mq_setattr函式 79
5.4 mq_send and mq_receive Functions / mq_send和mq_receive函式 82
5.5 Message Queue Limits / 訊息佇列限制 86
5.6 mq_notify Function / mq_notify函式 87
5.7 Posix Realtime Signals / Posix實時信號 98
5.8 Implementation Using Memory-Mapped I/O / 使用記憶體映射I/O實現 106
5.9 Summary / 小結 126
Chapter 6. System V Message Queues / System V訊息佇列 129
6.1 Introduction / 概述 129
6.2 msgget Function / msgget函式 130
6.3 msgsnd Function / msgsnd函式 131
6.4 msgrcv Function / msgrcv函式 132
6.5 msgctl Function / msgctl函式 134
6.6 Simple Programs / 簡單的程式 135
6.7 Client-Server Example / 客戶-伺服器示例 140
6.8 Multiplexing Messages / 多路復用訊息 142
6.9 Message Queues with select and poll / 訊息佇列上使用select和poll 151
6.10 Message Queue Limits / 訊息佇列限制 152
6.11 Summary / 小結 155
Part 3 Synchronization / 同步 157
Chapter 7. Mutexes and Condition Variables / 互斥鎖和條件變數 159
7.1 Introduction / 概述 159
7.2 Mutexes: Locking and Unlocking / 互斥鎖:加鎖與解鎖 159
7.3 Producer-Consumer Problem / 生產者-消費者問題 161
7.4 Locking versus Waiting / 加鎖與等待 165
7.5 Condition Variables: Waiting and Signaling / 條件變數:等待與信號傳送 167
7.6 Condition Variables: Timed Waits and Broadcasts / 條件變數:定時等待和廣播 171
7.7 Mutexes and Condition Variable Attributes / 互斥鎖和條件變數的屬性 172
7.8 Summary / 小結 174
Chapter 8. Read-Write Locks / 讀寫鎖 177
8.1 Introduction / 概述 177
8.2 Obtaining and Releasing Read-Write Locks / 獲取與釋放讀寫鎖 178
8.3 Read-Write Lock Attributes / 讀寫鎖屬性 179
8.4 Implementation Using Mutexes and Condition Variables / 使用互斥鎖和條件變數實現 179
8.5 Thread Cancellation / 執行緒取消 187
8.6 Summary / 小結 192
Chapter 9. Record Locking / 記錄加鎖 193
9.1 Introduction / 概述 193
9.2 Record Locking versus File Locking / 記錄加鎖與檔案加鎖 197
9.3 Posix fcntl Record Locking /Posix fcntl記錄加鎖 199
9.4 Advisory Locking / 勸告性加鎖 203
9.5 Mandatory Locking / 強制性加鎖 204
9.6 Priorities of Readers and Writers / 讀出者和寫入者的優先權 207
9.7 Starting Only One Copy of a Daemon / 只啟動守護進程的一個副本 213
9.8 Lock Files / 鎖檔案 214
9.9 NFS Locking / NFS加鎖 216
9.10 Summary / 小結 216
Chapter 10. Posix Semaphores / Posix信號量 219
10.1 Introduction / 概述 219
10.2 sem_open, sem_close, and sem_unlink Functions / sem_open、sem_close和sem_unlink函式 225
10.3 sem_wait and sem_trywait Functions / sem_wait和sem_trywait函式 226
10.4 sem_post and sem_getvalue Functions / sem_post和sem_getvalue函式 227
10.5 Simple Programs / 簡單的程式 228
10.6 Producer-Consumer Problem / 生產者-消費者問題 233
10.7 File Locking / 檔案加鎖 238
10.8 sem_init and sem_destroy Functions / sem_init和sem_destroy函式 238
10.9 Multiple Producers, One Consumer / 多生產者,單消費者 242
10.10 Multiple Producers, Multiple Consumers / 多生產者,多消費者 245
10.11 Multiple Buffers / 多緩衝區 249
10.12 Sharing Semaphores between Processes / 進程間共享信號量 256
10.13 Semaphore Limits / 信號量限制 257
10.14 Implementation Using FIFOs / 使用FIFO實現 257
10.15 Implementation Using Memory-Mapped I/O / 使用記憶體映射I/O實現 262
10.16 Implementation Using System V Semaphores / 使用System V信號量實現 271
10.17 Summary / 小結 278
Chapter 11. System V Semaphores / System V信號量 281
11.1 Introduction / 概述 281
11.2 semget Function / semget函式 282
11.3 semop Function / semop函式 285
11.4 semctlFunction / semctl函式 287
11.5 Simple Programs / 簡單的程式 289
11.6 File Locking / 檔案加鎖 294
11.7 Semaphore Limits / 信號量限制 296
11.8 Summary / 小結 300
Part 4 Shared Memory / 共享記憶體 301
Chapter 12. Shared Memory Introduction / 共享記憶體簡介 303
12.1 Introduction / 概述 303
12.2 mmap, munmap, and msync Functions / mmap、munmap和msync函式 307
12.3 Increment Counter in a Memory-Mapped File / 記憶體映射檔案中的計數器遞加 311
12.4 4.4BSD Anonymous Memory Mapping / 4.4BSD匿名記憶體映射 315
12.5 SVR4 /dev/zero Memory Mapping / SVR4 /dev/zero記憶體映射 316
12.6 Referencing Memory-Mapped Objects / 引用記憶體映射的對象 317
12.7 Summary / 小結 322
Chapter 13. Posix Shared Memory / Posix共享記憶體 325
13.1 Introduction / 概述 325
13.2 shm_open and shm_unlink Functions / shm_open和shm_unlink函式 326
13.3 ftruncate and fstat Functions / ftruncate和fstat函式 327
13.4 Simple Programs / 簡單的程式 328
13.5 Incrementing a Shared Counter / 共享計數器遞加 333
13.6 Sending Messages to a Server / 向伺服器傳送訊息 336
13.7 Summary / 小結 342
Chapter 14. System V Shared Memory / System V共享記憶體 343
14.1 Introduction / 概述 343
14.2 shmget Function / shmget函式 343
14.3 shmat Function / shmat函式 344
14.4 shmdt Function / shmdt函式 345
14.5 shmctl Function / shmctl函式 345
14.6 Simple Programs / 簡單的程式 346
14.7 Shared Memory Limits / 共享記憶體限制 349
14.8 Summary / 小結 351
Part 5 Remote Procedure Calls / 遠程過程調用 353
Chapter 15. Doors / 門 355
15.1 Introduction / 概述 355
15.2 door_call Function / door_call函式 361
15.3 door_create Function / door_create函式 363
15.4 door_return Function / door_return函式 364
15.5 door_cred Function / door_cred函式 365
15.6 door_info Function / door_info函式 365
15.7 Examples / 示例 366
15.8 Descriptor Passing / 描述符傳遞 379
15.9 door_server_create Function / door_server_create函式 384
15.10 door_bind, door_unbind, and door_revoke Functions / door_bind、door_unbind和door_revoke函式 390
15.11 Premature Termination of Client or Server / 客戶或伺服器的過早終止 390
15.12 Summary / 小結 397
Chapter 16. Sun RPC 399
16.1 Introduction / 概述 399
16.2 Multithreading / 多執行緒技術 407
16.3 Server Binding / 伺服器綁定 411
16.4 Authentication / 鑑別 414
16.5 Timeout and Retransmission / 逾時和重傳 417
16.6 Call Semantics / 調用語義 422
16.7 Premature Termination of Client or Server / 客戶或伺服器的過早終止 424
16.8 XDR: External Data Representation / XDR:外部數據表示 426
16.9 RPC Packet Formats / RPC分組格式 444