譯者序
前言
作者簡介
第1章Windows初步1
1.1操作係統必備功能1
1.2Windows的演化2
1.3Windows版本2
1.3.1過時的Windows先前版本2
1.3.2Windows NT5和NT63
1.3.3處理器支持3
1.4Windows的市場角色3
1.5Windows、標準以及開放係統4
1.6Windows準則5
1.732位和64位源代碼可移植性6
1.8標準C庫:何時用它來處理文件7
1.9使用本書所需的條件7
1.9.1為什麼使用C而不是C++7
1.9.2使用示例7
1.10示例:一個簡單的順序文件復製程序8
1.10.1使用C庫的文件復製9
1.10.2使用Windows的文件復製11
1.10.3使用Windows便利函數的
文件復製12
1.11小結13
1.11.1前瞻14
1.11.2附加閱讀14
1.12習題15
第2章使用Windows文件係統和
字符I/O16
2.1Windows文件係統16
2.2文件命名17
2.3文件的打開、讀取、寫入以及關閉17
2.3.1文件的創建和打開17
2.3.2關閉文件19
2.3.3讀文件20
2.3.4寫文件21
2.4Unicode和通用字符21
2.4.1另一種通用字符串處理函數22
2.4.2通用Main函數23
2.4.3函數定義23
2.5Unicode策略23
2.6示例:錯誤處理23
2.7標準設備25
2.8示例:將多個文件復製到標準輸齣26
2.9示例:簡單的文件加密27
2.10文件和目錄管理29
2.10.1文件管理29
2.10.2目錄管理31
2.11控製颱I/O32
2.12示例:打印和提示33
2.13示例:打印當前目錄35
2.14小結36
2.14.1前瞻36
2.14.2附加閱讀36
2.15習題36
第3章高級文件、目錄處理與注冊錶38
3.164位文件係統38
3.2文件指針38
3.2.164位算術39
3.2.2使用重疊結構來指定文件位置40
3.3獲得文件尺寸41
3.4示例:隨機記錄更新41
3.5文件屬性和目錄處理45
3.5.1路徑名46
3.5.2其他用於獲得文件和目錄屬性的方法46
3.5.3臨時文件名47
3.6示例:列齣文件屬性47
3.7示例:設置文件時間50
3.8文件處理策略51
3.9文件鎖52
3.9.1釋放文件鎖54
3.9.2鎖邏輯的後果54
3.10注冊錶55
3.11注冊錶管理56
3.11.1項管理57
3.11.2值和數據管理58
3.12示例:列齣注冊錶項及其內容59
3.13小結62
3.13.1前瞻62
3.13.2附加閱讀62
3.14習題62
第4章異常處理64
4.1異常及其處理程序64
4.1.1Try和Except塊64
4.1.2過濾錶達式及其值66
4.1.3異常代碼67
4.1.4小結:異常處理順序68
4.2浮點異常69
4.3錯誤和異常70
4.4示例:以異常方式處理錯誤71
4.5終止處理程序72
4.5.1離開try塊72
4.5.2非正常終止73
4.5.3執行並離開終止處理程序73
4.5.4組閤finally和except塊73
4.5.5全局和局部解開74
4.5.6終止處理程序:進程和綫程
終止74
4.5.7SEH和C++異常處理74
4.6示例:使用終止處理程序來改進程序質量74
4.7示例:使用過濾函數77
4.8控製颱控製處理程序79
4.9示例:一個控製颱控製處理程序80
4.10嚮量化異常處理82
4.11小結82
4.12習題83
第5章內存管理、內存映射文件和DLL84
5.1Windows內存管理架構84
5.2堆86
5.3管理堆內存88
5.3.1HeapAlloc88
5.3.2HeapFree89
5.3.3HeapReAlloc89
5.3.4HeapSize89
5.3.5更多關於序列化與異常標誌的信息90
5.3.6其他堆函數90
5.3.7小結:堆管理91
5.4示例:使用二叉搜索樹對文件進行排序91
5.5內存映射文件95
5.5.1文件映射對象96
5.5.2將對象映射到進程地址空間97
5.5.3文件映射的限製99
5.5.4小結:文件映射100
5.6示例:使用映射文件進行順序文件處理100
5.7示例:對內存映射文件排序102
5.8基指針104
5.9示例:使用基指針104
5.10動態鏈接庫108
5.10.1靜態庫和動態庫108
5.10.2隱式鏈接109
5.10.3顯式鏈接111
5.11示例:顯式鏈接文件轉換函數112
5.12DLL進入點113
5.13DLL版本管理114
5.14小結115
5.14.1前瞻115
5.14.2附加閱讀115
5.15習題115
第6章進程管理117
6.1Windows進程和綫程117
6.2進程創建118
6.2.1指定可執行映像和命令行120
6.2.2可繼承句柄121
6.3進程標識122
6.4復製句柄123
6.5進程的退齣與終止124
6.6等待進程終止125
6.7環境塊和字符串125
6.8示例:並行模式搜索126
6.9多處理器環境中的進程129
6.10進程執行時間130
6.11示例:進程執行時間130
6.12生成控製颱控製事件131
6.13示例:簡單的作業管理132
6.13.1創建一個後颱作業132
6.13.2獲取作業號135
6.13.3列齣背景作業136
6.13.4在作業清單文件中查找作業137
6.13.5作業對象138
6.14示例:使用作業對象139
6.15小結142
6.16習題142
第7章綫程和調度144
7.1綫程概述144
7.2綫程基礎145
7.3綫程管理146
7.3.1CreateThread146
7.3.2ExitThread147
7.3.3GetExitCodeThread147
7.3.4綫程標識147
7.3.5更多綫程管理函數147
7.3.6掛起以及恢復綫程148
7.3.7等待綫程終止148
7.4在綫程中使用C庫148
7.5示例:多綫程的模式搜索149
7.6性能影響152
7.7老闆/工人和其他綫程模型152
7.8示例:閤並排序——利用多處理器152
7.9程序並行性簡介157
7.10綫程本地存儲158
7.11進程和綫程優先級以及調度159
7.12綫程狀態160
7.13陷阱和常見錯誤162
7.14計時等待163
7.15縴程163
7.16小結165
7.16.1前瞻165
7.16.2附加閱讀165
7.17習題165
第8章綫程同步167
8.1綫程同步之需167
8.1.1臨界代碼區域168
8.1.2臨界代碼區域問題的有瑕疵的解決方案168
8.1.3volatile存儲169
8.1.4內存架構和內存屏障169
8.1.5互鎖函數:介紹171
8.1.6局部和全局存儲171
8.1.7小結:綫程安全的代碼172
8.2綫程同步對象173
8.3CRITICAL_SECTION對象173
8.4用於保護共享變量的CRITICAL_SECTION174
8.5示例:一個簡單的生産者/消費者係統176
8.6互斥量180
8.6.1被放棄的互斥量181
8.6.2互斥量、CRITICAL_SECTION以及死鎖181
8.6.3復習:互斥量與CRITICAL_SECTION對比183
8.6.4堆鎖183
8.7信號量183
8.7.1使用信號量184
8.7.2信號量的限製184
8.8事件185
8.9示例:一個生産者/消費者係統187
8.9.1復習:Windows同步對象189
8.9.2消息和對象等待190
8.10更多互斥量和CRITICAL_SECTION的指導原則190
8.11更多互鎖函數191
8.12內存管理性能的考慮192
8.13小結192
8.13.1前瞻192
8.13.2附加閱讀192
8.14 習題192
第9章 鎖、性能以及NT6增強194
9.1 同步性能影響194
9.2 用於性能試驗的模型程序197
9.3 使用CS自鏇數來調整多處理器性能198
9.4 NT6輕量級讀/寫鎖199
9.5 減少綫程競爭的綫程池200
9.6 I/O完成端口202
9.7 NT6綫程池203
9.7.1 CreateThreadpoolWork 203
9.7.2 SubmitThreadpoolWork 204
9.7.3 WaitForThreadpoolWork-Callbacks 204
9.7.4 CloseThreadpoolWork 204
9.7.5 迴調函數204
9.7.6 將迴調提交給綫程池207
9.7.7 綫程池環境207
9.7.8 進程綫程池207
9.7.9 其他綫程池迴調類型208
9.8 小結:鎖性能208
9.9 再論並行性208
9.9.1 更好的基礎以及擴展中的並行程序技術209
9.9.2 並行編程的可選方法209
9.9.3 並行性框架209
9.9.4 不要忘瞭挑戰的存在210
9.10 處理器親和性210
9.10.1 係統、進程與綫程親和性掩碼211
9.10.2 查找處理器數量212
9.11 性能指導原則和陷阱212
9.12 小結213
9.12.1 前瞻213
9.12.2 附加閱讀213
9.13 習題213
第10章 高級綫程同步215
10.1 條件變量模型和安全性能215
10.1.1 一起使用事件和互斥量215
10.1.2 條件變量模型216
10.1.3 條件變量模型的使用218
10.2 使用SignalObjectAndWait219
10.3 示例:閥值屏障對象220
10.4 隊列對象223
10.5 示例:在多階段管綫中使用隊列226
10.6 Windows NT6條件變量233
10.7 異步過程調用236
10.8 異步過程調用的排隊236
10.9 可報警的等待狀態237
10.10 安全的綫程取消239
10.11 為瞭應用程序的可移植而使用Pthreads239
10.12 綫程堆棧和綫程數239
10.13 關於設計、調試和測試的提示240
10.14 Windows API之外241
10.15 小結241
10.15.1 前瞻242
10.15.2 附加閱讀242
10.16 習題242
第11章 進程間通信244
11.1 匿名管道244
11.2 示例:使用匿名管道進行I/O重定嚮245
11.3 命名管道247
11.3.1 使用命名管道248
11.3.2 創建命名管道248
11.3.3 命名管道客戶連接249
11.3.4 命名管道狀態函數250
11.3.5 命名管道連接函數250
11.3.6 客戶和服務器的命名管道連接250
11.4 命名管道事務函數251
11.5 示例:客戶/服務器命令行處理程序253
11.6 關於客戶/服務器命令行處理程序的注釋258
11.7 郵槽259
11.7.1 使用郵槽260
11.7.2 創建和打開郵槽260
11.8 管道和郵槽的創建、連接和命名261
11.9 示例:客戶可定位的服務器262
11.10 小結264
11.11 習題264
第12章 使用Windows套接字進行網絡編程265
12.1 Windows套接字265
12.1.1 Winsock初始化266
12.1.2 創建套接字266
12.2 套接字服務器函數267
12.2.1 綁定套接字267
12.2.2 將綁定的套接字置於偵聽狀態268
12.2.3 接受客戶連接268
12.2.4 斷開以及關閉套接字268
12.2.5 示例:準備並接受客戶連接269
12.3 套接字客戶函數270
12.3.1 連接服務器270
12.3.2 示例:客戶連接服務器270
12.3.3 發送和接收數據270
12.4 命名管道和套接字之對比271
12.4.1 命名管道與套接字服務器之比較271
12.4.2 命名管道與套接字客戶之比較271
12.5 示例:套接字消息接收函數271
12.6 示例:基於套接字的客戶272
12.7 示例:基於套接字的、帶有新特性的服務器274
12.7.1 主程序275
12.7.2 服務器綫程278
12.7.3 運行套接字服務器279
12.7.4 安全注釋280
12.8 進程內服務器280
12.9 麵嚮行的消息、DLL進入點以及TLS282
12.10 示例:綫程安全的套接字消息DLL283
12.11 示例:另一種綫程安全的DLL策略286
12.12 數據報289
12.12.1 數據報廣播289
12.12.2 使用數據報進行遠程過程調用289
12.13 Berkeley套接字和Windows套接字的比較290
12.14 Windows套接字使用重疊I/O290
12.15 Windows套接字的額外特性290
12.16 小結290
12.16.1 前瞻290
12.16.2 附加閱讀291
12.17 習題291
第13章 Windows服務293
13.1 概述:編寫Windows服務293
13.2 main()函數294
13.3 ServiceMain()函數294
13.3.1 注冊服務控製處理程序295
13.3.2 設置服務狀態295
13.3.3 SERVICE_STATUS結構296
13.3.4 服務特定的代碼297
13.4 服務控製處理程序297
13.5 事件記錄298
13.6 示例:服務“包裝器”298
13.7 管理Windows服務302
13.7.1 打開SCM303
13.7.2 創建和刪除服務303
13.7.3 啓動服務304
13.7.4 控製服務304
13.7.5 查詢服務狀態305
13.7.6 小結:服務操作和管理305
13.8 示例:服務控製Shell305
13.9 與服務共享內核對象309
13.10 調試服務時的注意事項309
13.11 小結310
13.11.1 前瞻310
13.11.2 附加閱讀310
13.12 習題310
第14章 異步輸入/輸齣與完成端口311
14.1 Windows異步I/O概述311
14.2 重疊I/O312
14.2.1 重疊I/O的後果312
14.2.2 重疊結構313
14.2.3 重疊I/O狀態313
14.2.4 取消重疊I/O操作314
14.3 示例:在一個文件句柄之上同步314
14.4 示例:使用重疊I/O和多緩衝區進行文件轉換315
14.5 使用完成例程的擴展I/O318
14.5.1 ReadFileEx、WriteFileEx和完成例程318
14.5.2 可報警的等待函數319
14.5.3 完成例程的執行和可報警等待的返迴320
14.6 示例:使用擴展I/O的文件轉換321
14.7 使用綫程的異步I/O324
14.8 可等待定時器324
14.9 示例:使用可等待定時器325
14.9.1 可等待定時器示例的注釋327
14.9.2 綫程池定時器327
14.10 I/O完成端口327
14.10.1 管理I/O完成端口328
14.10.2 等待I/O完成端口328
14.10.3 郵發給I/O完成端口329
14.10.4 I/O完成端口的替代329
14.11 示例:使用I/O完成端口的服務器329
14.12 小結335
14.13 習題335
第15章 Windows對象的安全337
15.1 安全屬性337
15.2 安全性概述:安全描述符338
15.2.1 訪問控製列錶338
15.2.2 使用Windows對象安全性339
15.2.3 對象權限和對象訪問339
15.2.4 安全描述符初始化339
15.3 安全描述符控製標誌339
15.4 安全標識符340
15.5 管理ACL341
15.6 示例:NTFS文件的UNIX風格的權限342
15.7 示例:初始化安全屬性345
15.8 安全描述符的讀與更改347
15.9 示例:讀取文件權限349
15.10 示例:更改文件權限350
15.11 給內核和通信對象施加安全350
15.11.1 給命名管道施加安全350
15.11.2 內核與私有對象的安全性351
15.11.3 ACE掩碼值351
15.12 示例:給進程及其綫程施加安全352
15.13 其他安全特性的概述352
15.13.1 移除ACE352
15.13.2 絕對的和自相關的安全描述符352
15.13.3 係統ACL352
15.13.4 訪問令牌信息353
15.13.5 SID管理353
15.14 小結353
15.14.1 前瞻353
15.14.2 附加閱讀353
15.15 習題353
附錄A 使用示例程序355
附錄B 源代碼可移植性:Windows、UNIX和Linux357
附錄C 性能結果370
參考文獻379
· · · · · · (
收起)