本書是一部UNIX 網絡編程的經典之作!進程間通信(IPC)幾乎是所有Unix 程序性能的關鍵,理解IPC 也是理解如何開發(fā)不同主機間網絡應用程序的必要條件。本書從對Posix IPC 和System V IPC 的內部結構開始討論,全面深入地介紹了4 種IPC 形式:消息傳遞(管道、FIFO、消息隊列)、同步(互斥鎖、條件變量、讀寫鎖、文件與記錄鎖、信號量)、共享內存(匿名共享內存、具名共享內存)及遠程過程調用(Solaris門、Sun RPC)。附錄中給出了測量各種IPC 形式性能的方法。 本書內容詳盡且具權威性,幾乎每章都提供精選的習題,并提供了部分習題的答案,是網絡研究和開發(fā)人員理想的參考書。
兩卷本的《UNIX網絡編程》是已故著名UNIX網絡專家W. Richard Stevens的傳世之作。卷2著重討論如何讓應用程序與在其他機器上的應用程序進行對話。本書完全重寫并擴充了1990年版《UNIX網絡編程》的第3章和第18章。字數統(tǒng)計表明,現在的內容是第1版的5倍。 良好的進程間通信(IPC)機制是提高UNIX程序性能的關鍵。本書全面深入地講解了各種進程間通信形式,包括消息傳遞、同步、共享內存及遠程過程調用(RPC)。書中包含了大量經過優(yōu)化的源代碼,幫助讀者加深理解,這些源代碼可以從本書網站下載。 本書是網絡研究和開發(fā)人員公認的權-威參考書,無論網絡編程的初學者還是網絡專家都會大受裨益。
W. 理查德·史蒂文斯(W. Richard Stevens)國際知名的UNIX 和網絡專家,備受贊譽的技術作家。他1951 年2 月5 日出生于贊比亞,后隨父母回到美國。中學時就讀于弗吉尼亞菲什伯恩軍事學校,1973 年獲得密歇根大學航空和航天工程學士學位。1975 年至1982 年,他在亞利桑那州圖森市的基特峰國家天文臺從事計算機編程工作,業(yè)余時間喜愛飛行運動,做過兼職飛行教練。這期間他分別在1978 年和1982 年獲得亞利桑那大學系統(tǒng)工程碩士和博士學位。此后他去康涅狄格州紐黑文的健康系統(tǒng)國際公司任主管計算機服務的副總裁。1990 年他回到圖森,從事專業(yè)技術寫作和咨詢工作。寫下了多種經典的傳世之作,包括《TCP/IP 詳解》(三卷)、《UNIX 環(huán)境高級編程》和《UNIX網絡編程》(兩卷)。Stevens 于1999 年9 月1日去世,年僅48 歲。2000 年他被國際權威機構USENIX 追授終身成就獎。
第 一部分 簡介
第 1章 簡介 2
1.1 概述 2
1.2 進程、線程與信息共享 3
1.3 IPC對象的持續(xù)性 4
1.4 名字空間 5
1.5 fork、exec和exit對IPC對象的
影響 7
1.6 出錯處理:包裹函數 8
1.7 Unix標準 9
1.8 書中IPC例子索引表 11
1.9 小結 13
習題 13
第 2章 Posix IPC 14
2.1 概述 14
2.2 IPC名字 14
2.3 創(chuàng)建與打開IPC通道 16
2.4 IPC權限 18
2.5 小結 19
習題 19
第3章 System V IPC 20
3.1 概述 20
3.2 key_t鍵和ftok函數 20
3.3 ipc_perm結構 22
3.4 創(chuàng)建與打開IPC通道 22
3.5 IPC權限 24
3.6 標識符重用 25
3.7 ipcs和ipcrm程序 27
3.8 內核限制 27
3.9 小結 28
習題 29
第二部分 消息傳遞
第4章 管道和FIFO 32
4.1 概述 32
4.2 一個簡單的客戶-服務器例子 32
4.3 管道 32
4.4 全雙工管道 37
4.5 popen和pclose函數 39
4.6 FIFO 40
4.7 管道和FIFO的額外屬性 44
4.8 單個服務器,多個客戶 46
4.9 對比迭代服務器與并發(fā)服務器 50
4.10 字節(jié)流與消息 51
4.11 管道和FIFO限制 55
4.12 小結 56
習題 57
第5章 Posix消息隊列 58
5.1 概述 58
5.2 mq_open、mq_close和mq_unlink
函數 59
5.3 mq_getattr和mq_setattr函數 61
5.4 mq_send和mq_receive函數 64
5.5 消息隊列限制 67
5.6 mq_notify函數 68
5.7 Posix實時信號 78
5.8 使用內存映射I/O實現Posix消息隊列 85
5.9 小結 101
習題 101
第6章 System V消息隊列 103
6.1 概述 103
6.2 msgget函數 104
6.3 msgsnd函數 104
6.4 msgrcv函數 105
6.5 msgctl函數 106
6.6 簡單的程序 107
6.7 客戶-服務器例子 112
6.8 復用消息 113
6.9 消息隊列上使用select和poll 121
6.10 消息隊列限制 122
6.11 小結 124
習題 124
第三部分 同步
第7章 互斥鎖和條件變量 126
7.1 概述 126
7.2 互斥鎖:上鎖與解鎖 126
7.3 生產者-消費者問題 127
7.4 對比上鎖與等待 131
7.5 條件變量:等待與信號發(fā)送 132
7.6 條件變量:定時等待和廣播 136
7.7 互斥鎖和條件變量的屬性 136
7.8 小結 139
習題 139
第8章 讀寫鎖 140
8.1 概述 140
8.2 獲取與釋放讀寫鎖 140
8.3 讀寫鎖屬性 141
8.4 使用互斥鎖和條件變量實現讀寫鎖 142
8.5 線程取消 148
8.6 小結 153
習題 153
第9章 記錄上鎖 154
9.1 概述 154
9.2 對比記錄上鎖與文件上鎖 157
9.3 Posix fcntl記錄上鎖 158
9.4 勸告性上鎖 162
9.5 強制性上鎖 164
9.6 讀出者和寫入者的優(yōu)先級 166
9.7 啟動一個守護進程的唯一副本 170
9.8 文件作鎖用 171
9.9 NFS上鎖 173
9.10 小結 173
習題 174
第 10章 Posix信號量 175
10.1 概述 175
10.2 sem_open、sem_close和sem_unlink函數 179
10.3 sem_wait和sem_trywait函數 180
10.4 sem_post和sem_getvalue函數 180
10.5 簡單的程序 181
10.6 生產者-消費者問題 186
10.7 文件上鎖 190
10.8 sem_init和sem_destroy函數 191
10.9 多個生產者,單個消費者 193
10.10 多個生產者,多個消費者 196
10.11 多個緩沖區(qū) 199
10.12 進程間共享信號量 205
10.13 信號量限制 206
10.14 使用FIFO實現信號量 206
10.15 使用內存映射I/O實現信號量 210
10.16 使用System V信號量實現Posix信號量 218
10.17 小結 224
習題 225
第 11章 System V 信號量 226
11.1 概述 226
11.2 semget函數 227
11.3 semop函數 229
11.4 semctl函數 231
11.5 簡單的程序 232
11.6 文件上鎖 237
11.7 信號量限制 238
11.8 小結 242
習題 242
第四部分 共享內存區(qū)
第 12章 共享內存區(qū)介紹 244
12.1 概述 244
12.2 mmap、munmap和msync函數 247
12.3 在內存映射文件中給計數器持續(xù)加1 250
12.4 4.4BSD匿名內存映射 254
12.5 SVR4 /dev/zero內存映射 255
12.6 訪問內存映射的對象 255
12.7 小結 259
習題 260
第 13章 Posix共享內存區(qū) 261
13.1 概述 261
13.2 shm_open和shm_unlink函數 261
13.3 ftruncate和fstat函數 262
13.4 簡單的程序 263
13.5 給一個共享的計數器持續(xù)加1 267
13.6 向一個服務器發(fā)送消息 270
13.7 小結 275
習題 275
第 14章 System V共享內存區(qū) 276
14.1 概述 276
14.2 shmget函數 276
14.3 shmat函數 277
14.4 shmdt函數 277
14.5 shmctl函數 277
14.6 簡單的程序 278
14.7 共享內存區(qū)限制 281
14.8 小結 282
習題 283
第五部分 遠程過程調用
第 15章 門 286
15.1 概述 286
15.2 door_call函數 291
15.3 door_create函數 292
15.4 door_return函數 293
15.5 door_cred函數 294
15.6 door_info函數 294
15.7 例子 295
15.8 描述符傳遞 306
15.9 door_sever_create函數 310
15.10 door_bind、door_unbind和door_revoke函數 315
15.11 客戶或服務器的過早終止 315
15.12 小結 321
習題 322
第 16章 Sun RPC 323
16.1 概述 323
16.2 多線程化 330
16.3 服務器捆綁 333
16.4 認證 336
16.5 超時和重傳 338
16.6 調用語義 342
16.7 客戶或服務器的過早終止 343
16.8 XDR:外部數據表示 345
16.9 RPC分組格式 361
16.10 小結 365
習題 366
后記 368
附錄A 性能測量 371
附錄B 線程入門 406
附錄C 雜湊的源代碼 409
附錄D 精選習題解答 417
參考文獻 433
索引 435