[Windows系統編程(原書第4版)].Johnson.M.Hart

>>>  文章華國詩禮傳家—精彩書評選  >>> 簡體     傳統

本書是介紹使用Microsoft Windows應用程序編程接口進行應用程序開發的專著,專注于文件系統、進程和線程管理、進程間通信、網絡編程以及同步等核心系統服務。本書的示例都來自現實場景,其中有許多是基于作者在實踐中所開發的真實應用程序。本書的目的在于展示如何高效地在現實中使用Windows API特性來開發高質量、高性能的應用程序。

本書適合以下讀者閱讀:任何有C或C++編程知識且想快速學習Windows應用程序開發的開發人員、計算機科學專業學習系統編程或應用程序開發課程的高年級學生以及UNIX/Linux程序員。

Johnson(John)M.Hart是一位顧問、專攻Microsoft Windows和.NET應用程序開發、開放系統計算、技術培訓和寫作以及軟件工程等領域。作為軟件工程師、經理、工程主管以及Cilk Arts公司、Sierra Atlantic、HP和Apollo Computer的高級技術顧問,他有超過25年的經驗。John還開發并提供Windows、UNIX和Linux方面的專業培訓課程,而且曾在肯塔基大學做過9年的計算機科學教授。他是技術、貿易和學術文章以及包括《Windows系統編程》4個版本在內的許多書籍的作者。

目錄 · · · · · ·

譯者序

前言

作者簡介

第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


2022-12-08 19:06:59

[新一篇] MacTalk·人生元編程

[舊一篇] “文化革命”和毛帝合作的方針
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表