Rust 系統編程 Practical System programming for Rust developers: Build fast and secure software for Linux/Unix systems with the help of practical examples

[印]普拉布·艾什沃拉 著 劉君 譯

  • Rust 系統編程-preview-1
  • Rust 系統編程-preview-2
  • Rust 系統編程-preview-3
Rust 系統編程-preview-1

買這商品的人也買了...

商品描述

《Rust系統編程》詳細闡述了與Rust系統編程相關的基本解決方案,主要包括Rust工具鏈和項目結構,Rust編程語言之旅,Rust標準庫介紹,管理環境、命令行和時間,Rust中的內存管理,在Rust中使用文件和目錄,在Rust中實現終端I/O,處理進程和信號,管理並發,處理設備I/O,學習網絡編程,編寫不安全Rust和FFI等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。 本書適合作為高等院校電腦及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。

目錄大綱

目    錄

第1篇  Rust系統編程入門

第1章  Rust工具鏈和項目結構 3

1.1  技術要求 3

1.2  為項目選擇正確的Rust配置 4

1.2.1  選擇Rust發布通道 4

1.2.2  選擇Rust項目類型 6

1.3  Cargo和項目結構簡介 7

1.4  使用Cargo自動化構建管理 9

1.4.1  構建一個基本的二進制項Crate 9

1.4.2  配置Cargo 11

1.4.3  構建靜態庫Crate 13

1.5  自動化依賴項管理 14

1.5.1  指定依賴項的位置 15

1.5.2  在源代碼中使用依賴包 16

1.6  編寫和運行自動化測試 16

1.6.1  用Rust編寫單元測試 17

1.6.2  用Rust編寫集成測試 18

1.6.3  控制測試執行 19

1.6.4  按順序或並行運行測試 21

1.7  生成項目文檔 21

1.7.1  在Crate中編寫內聯文檔註釋 22

1.7.2  在Markdown文件中編寫文檔 23

1.7.3  運行文檔測試 24

1.8  小結 24

1.9  延伸閱讀 25

第2章  Rust編程語言之旅 27

2.1  技術要求 28

2.2  分析問題域 28

2.3  系統行為建模 29

2.4  構建標記化器 32

2.4.1  Tokenizer數據結構 32

2.4.2  Tokenizer數據處理 36

2.5  構建解析器 40

2.5.1  Parser數據結構 41

2.5.2  Parser方法 43

2.5.3  運算符優先級 47

2.6  構建求值器 50

2.7  處理錯誤 51

2.8  綜合演練 55

2.9  小結 57

第3章  Rust標準庫介紹 59

3.1  技術要求 59

3.2  Rust標準庫和系統編程 59

3.3  探索Rust標準庫 62

3.4  面向計算的模塊 67

3.4.1  數據類型 67

3.4.2  數據處理 69

3.4.3  錯誤處理 69

3.4.4  外部函數接口 70

3.4.5  編譯器 70

3.5  面向系統調用的模塊 70

3.5.1  內存管理 70

3.5.2  並發 72

3.5.3  文件系統 73

3.5.4  輸入/輸出 73

3.5.5  網絡連接 73

3.5.6  與特定操作系統相關的模塊 73

3.5.7  時間 73

3.5.8  異步 73

3.6  構建模板引擎 74

3.7  模板語法和設計 76

3.7.1  模板文件的常見元素列表 76

3.7.2  模板引擎的概念模型 77

3.7.3  模板引擎的工作原理 79

3.7.4  模板引擎生成HTML的步驟 80

3.7.5  新建庫項目 81

3.7.6  模板引擎的代碼結構 81

3.7.7  數據結構 82

3.7.8  關鍵函數 83

3.7.9  測試用例 84

3.8  編寫模板引擎 86

3.8.1  解析器的設計 86

3.8.2  編寫解析器 87

3.8.3  支持函數 88

3.8.4  main()函數 91

3.8.5  執行模板引擎 95

3.9  小結 96

3.10  延伸閱讀 97

第4章  管理環境、命令行和時間 99

4.1  技術要求 100

4.2  項目範圍和設計概述 100

4.2.1  要構建的內容 100

4.2.2  技術設計 103

4.3  使用Rust標準庫 106

4.3.1  路徑操作和目錄迭代 106

4.3.2  時間測量 108

4.3.3  使用環境變量 108

4.3.4  使用命令行參數 110

4.3.5  imagix庫設計方法總結 111

4.4  編寫imagix庫代碼 111

4.4.1  imagix庫的模塊結構 112

4.4.2  添加依賴項 114

4.4.3  遍歷目錄條目 114

4.4.4  調整圖像大小 115

4.4.5  圖像文件信息統計 117

4.4.6  錯誤處理 118

4.5  開發命令行應用程序 119

4.5.1  設計命令行界面 120

4.5.2  使用structopt對命令行二進制文件進行編碼 122

4.6  小結 125

第2篇  在Rust中管理和控制系統資源

第5章  Rust中的內存管理 129

5.1  技術要求 130

5.2  操作系統內存管理的基礎知識 130

5.2.1  內存管理生命周期 130

5.2.2  進程的內存佈局 134

5.3  Rust程序的內存佈局 136

5.3.1  理解Rust程序的內存佈局 136

5.3.2  棧、堆和靜態內存的特性 139

5.4  Rust內存管理生命周期 141

5.4.1  Rust內存管理生命周期概述 142

5.4.2  內存分配 144

5.4.3  內存使用和操作 146

5.4.4  Rust的所有權規則 147

5.4.5  Rust借用和引用規則 148

5.4.6  內存釋放 148

5.4.7  內存安全 149

5.5  實現動態數據結構 150

5.5.1  模板引擎設計的變化 152

5.5.2  編寫動態數據結構的代碼 154

5.6  小結 159

5.7  延伸閱讀 159

第6章  在Rust中使用文件和目錄 161

6.1  技術要求 161

6.2  理解用於文件操作的Linux系統調用 161

6.3  在Rust中執行文件I/O操作 164

6.3.1  創建 166

6.3.2  打開 166

6.3.3  復制 167

6.3.4  重命名 167

6.3.5  讀取 167

6.3.6  寫入 168

6.3.7  查詢 168

6.3.8  元數據 169

6.3.9  關閉 170

6.4  瞭解目錄和路徑操作 170

6.4.1  讀取目錄條目的詳細信息 172

6.4.2  以編程方式創建目錄結構 173

6.4.3  動態構造路徑字符串 173

6.5  設置硬鏈接、符號鏈接和執行查詢 174

6.5.1  創建硬鏈接 175

6.5.2  創建和查詢符號鏈接 175

6.6  在Rust中編寫shell命令 176

6.6.1  代碼概述 176

6.6.2  錯誤處理 178

6.6.3  源指標計算 180

6.6.4  main()函數 184

6.7  小結 186

第7章  在Rust中實現終端I/O 187

7.1  技術要求 187

7.2  終端I/O基礎知識 188

7.2.1  終端的特性 188

7.2.2  Termion Crate 189

7.2.3  定義項目構建內容 190

7.3  處理終端用戶界面和光標 192

7.3.1  編寫數據結構和main()函數 192

7.3.2  初始化文本查看器並獲取終端大小 195

7.3.3  顯示文檔並設置終端顏色、樣式和光標位置 196

7.3.4  退出文本查看器 197

7.4  處理鍵盤輸入和滾動 198

7.4.1  偵聽用戶的按鍵 199

7.4.2  定位終端光標 200

7.4.3  在終端上啟用滾動功能 202

7.5  處理鼠標輸入 203

7.6  小結 205

第8章  處理進程和信號 207

8.1  技術要求 207

8.2  理解Linux進程概念和系統調用 208

8.2.1  程序和進程之間的區別 208

8.2.2  程序內存佈局和進程管理 209

8.3  深入瞭解Linux進程基礎知識 211

8.3.1  進程管理關鍵任務分解 211

8.3.2  創建新進程 212

8.3.3  檢查子進程的狀態 213

8.3.4  使用進程間通信 213

8.3.5  設置環境變量 213

8.3.6  終止進程 214

8.3.7  處理信號 214

8.4  使用Rust生成進程 214

8.4.1  生成新的子進程 214

8.4.2  終止進程 216

8.4.3  檢查子進程的執行狀態 217

8.5  處理I/O和環境變量 218

8.5.1  處理子進程的I/O 218

8.5.2  為子進程設置環境變量 220

8.6  處理恐慌、錯誤和信號 221

8.6.1  中止當前進程 221

8.6.2  信號處理 223

8.7  用Rust編寫shell程序 225

8.7.1  新建項目 225

8.7.2  迭代1—生成執行命令的子進程 225

8.7.3  迭代2—添加對命令參數的支持 227

8.7.4  迭代3—支持自然語言命令 228

8.7.5  測試和錯誤處理 229

8.7.6  練習和改進 230

8.8  小結 231

第9章  管理並發 233

9.1  技術要求 233

9.2  並發的基礎知識 234

9.2.1  並發與並行 234

9.2.2  多線程的概念 237

9.3  生成和配置線程 239

9.3.1  使用thread::spawn()函數 240

9.3.2  使用thread::Builder結構 241

9.4  線程中的錯誤處理 242

9.5  線程間消息傳遞 245

9.6  通過共享狀態實現並發 247

9.6.1  互斥鎖和原子引用計數 248

9.6.2  定義程序結構 249

9.6.3  匯總共享狀態下的源文件統計信息 250

9.7  使用計時器暫停線程執行 254

9.8  小結 255

 

第3篇  高 級 主 題

第10章  處理設備I/O 259

10.1  技術要求 259

10.2  瞭解Linux中設備I/O的基礎知識 260

10.2.1  設備驅動程序 260

10.2.2  設備類型 262

10.3  執行緩沖讀取和寫入操作 263

10.4  使用標準輸入和輸出 266

10.5  I/O上的鏈接和迭代器 268

10.6  處理錯誤和返回值 270

10.7  獲取已連接USB設備的詳細信息 272

10.7.1  設計項目 272

10.7.2  編寫數據結構和工具函數 274

10.7.3  編寫main()函數 276

10.8  小結 278

第11章  學習網絡編程 279

11.1  技術要求 279

11.2  Linux中的網絡連接基礎知識 280

11.3  理解Rust標準庫中的網絡原語 283

11.3.1  Rust網絡標準庫中的基礎數據結構 283

11.3.2  IP地址應用示例 284

11.3.3  套接字示例 286

11.4  在Rust中使用TCP和UDP進行編程 286

11.4.1  編寫UDP服務器和客戶端 286

11.4.2  編寫TCP服務器和客戶端 289

11.5  編寫一個TCP反向代理 290

11.5.1  代理服務器類型 291

11.5.2  新建項目 292

11.5.3  編寫源服務器—結構體和方法 293

11.5.4  編寫源服務器—main()函數 295

11.5.5  測試源服務器 298

11.5.6  編寫反向代理服務器 299

11.5.7  測試反向代理服務器 302

11.6  小結 303

第12章  編寫不安全Rust和FFI 305

12.1  技術要求 305

12.2  不安全Rust簡介 306

12.2.1  區分安全Rust和不安全Rust代碼 307

12.2.2  在不安全Rust中的操作 308

12.3  FFI簡介 310

12.3.1  通過FFI接口調用外部函數 310

12.3.2  跨FFI邊界共享聯合體 311

12.4  安全FFI指南 313

12.5  從C中調用Rust 314

12.5.1  項目操作步驟概述 314

12.5.2  具體操作過程 314

12.6  理解ABI 316

12.6.1  關於ABI 317

12.6.2  條件編譯選項 317

12.6.3  數據佈局約定 318

12.6.4  鏈接選項 319

12.7  小結 319