Linux C 與 C++ 一線開發實踐, 2/e

朱文偉 李建英

  • 出版商: 清華大學
  • 出版日期: 2024-06-01
  • 定價: $954
  • 售價: 8.5$811
  • 語言: 簡體中文
  • ISBN: 7302663807
  • ISBN-13: 9787302663805
  • 相關分類: C++ 程式語言Linux
  • 下單後立即進貨 (約4週~6週)

  • Linux C 與 C++ 一線開發實踐, 2/e-preview-1
  • Linux C 與 C++ 一線開發實踐, 2/e-preview-2
  • Linux C 與 C++ 一線開發實踐, 2/e-preview-3
Linux C 與 C++ 一線開發實踐, 2/e-preview-1

相關主題

商品描述

Linux C/C++編程在Linux應用程序開發中占有重要的地位,掌握這項技術將在就業競爭中立於不敗之地。《Linux C與C++一線開發實踐》內容針對初中級讀者,貼近軟件公司一線開發實踐。全書厚達620多頁,知識點豐富,內容翔實,並配套示例源碼、作者QQ群答疑服務。 《Linux C與C++一線開發實踐》共分為16章,內容包括Linux概述、搭建開發環境、C++語言基礎、Linux文件編程、多進程編程、進程間通信、C++ Web編程、多線程基本編程、多線程高級編程、Linux下的庫、TCP/IP基礎、套接字基礎、TCP套接字網絡編程、UDP套接字網絡編程、原始套接字網絡編程,以及並發聊天服務器項目實戰等。 《Linux C與C++一線開發實踐》適合想全面學習Linux環境下C/C++語言編程的讀者,既可作為初中級開發人員的案頭查閱與參考手冊,也適合作為高等院校或高職高專相關課程的教學參考書。

目錄大綱

目    錄

第1章  Linux概述 1

1.1  什麽是Linux 1

1.2  Linux的簡史 2

1.3  Linux和Windows的比較 4

1.4  Linux主要應用領域 4

1.5  Linux的版本 5

1.6  使用哪個版本的Linux進行學習 5

1.7  Linux的特點 6

1.8  如何學習Linux 6

1.9  命令行還是圖形界面 7

1.10  電腦啟動的基本過程 7

1.10.1  按下電源 7

1.10.2  BIOS自檢 7

1.10.3  系統引導 9

1.10.4  啟動內核 10

1.11  認識Shell 11

1.12  圖形界面和字符界面的切換 11

1.12.1  在不退出X-Window的情況下切換到字符界面 11

1.12.2  強行退出X-Window進入文本模式 12

1.12.3  設置每次開機進入字符界面 12

1.12.4  從字符界面進入圖形界面 13

1.13  環境變量 14

第2章  搭建Linux C/C++開發環境 15

2.1  安裝和配置虛擬機Linux 15

2.1.1  在VMware下安裝Linux 15

2.1.2  開啟登錄時的root賬號 18

2.1.3  配置Linux虛擬機環境 20

2.1.4  配置Linux虛擬機網絡 24

2.1.5  通過終端工具連接Linux虛擬機 33

2.1.6  和虛擬機互傳文件 36

2.2  gcc/g++編譯器的使用 37

2.2.1  安裝C/C++編譯工具 37

2.2.2  gcc對C語言的編譯過程 37

2.2.3  gcc所支持的後綴名文件 41

2.2.4  gcc的語法格式 42

2.2.5  gcc常見選項 44

2.2.6  g++的基本使用 54

2.3  搭建集成式開發環境 55

2.3.1  基於Visual C++ 2017搭建IDE 56

2.3.2  基於Visual Studio Code搭建IDE 59

2.4  搭建非集成式開發環境 70

2.4.1  基於Visual Studio Code編輯和上傳源碼 70

2.4.2  為何要學gdb調試器 74

2.4.3  gdb簡介 74

2.4.4  重要準備 74

2.4.5  啟動gdb 75

2.4.6  退出gdb 75

2.4.7  gdb的常用命令概述 76

2.4.8  file命令加載程序 77

2.4.9  list命令顯示源碼 77

2.4.10  run命令運行程序 80

2.4.11  break命令設置斷點 82

第3章  C++語言基礎 85

3.1  C++基礎知識 85

3.1.1  C++程序結構 85

3.1.2  註釋 88

3.1.3  變量和數據類型 88

3.1.4  標識 89

3.1.5  基本數據類型 89

3.1.6  變量的定義和C++11中的auto 90

3.1.7  變量的範圍 93

3.1.8  變量初始化 94

3.1.9  常量 95

3.1.10  操作符/運算符 99

3.1.11  控制台交互 106

3.2  控制結構 110

3.2.1  條件結構 111

3.2.2  循環結構 112

3.2.3  分支控制和跳轉 115

3.2.4  選擇結構語句switch 116

3.3  函數 118

3.4  函數高級話題 122

3.4.1  參數按數值傳遞和按地址傳遞 122

3.4.2  函數參數默認值 124

3.4.3  函數重載 125

3.4.4  內聯函數 125

3.4.5  遞歸 126

3.4.6  函數的聲明 127

3.5  高級數據類型 128

3.5.1  數組 128

3.5.2  指針 138

3.5.3  動態分配內存 148

3.5.4  結構體 151

3.5.5  自定義數據類型 157

3.6  面向對象編程 160

3.6.1  類 160

3.6.2  構造函數和析構函數 163

3.6.3  構造函數重載 165

3.6.4  類的指針 167

3.6.5  由關鍵字struct和union定義的類 168

3.6.6  操作符重載 168

3.6.7  關鍵字this 171

3.6.8  靜態成員 172

3.6.9  類之間的關系 173

3.6.10  多態 180

3.7  C++面向對象小結 186

3.8  C++高級知識 190

3.8.1  模板 190

3.8.2  命名空間 196

3.8.3  異常處理 200

3.8.4  預處理指令 203

3.8.5  預定義宏 206

3.8.6  C++11中的預定義宏 207

3.9  字符串 209

3.9.1  字符串基礎 209

3.9.2  搜索與查找 217

3.10  再論異常處理 225

3.10.1  基本概念 225

3.10.2  拋出異常 225

3.10.3  捕獲異常 226

3.10.4  C++標準異常 227

3.10.5  定義新的異常 227

3.11  再論函數模板 228

3.12  字符集 230

3.12.1  電腦上的3種字符集 230

3.12.2  查看Linux系統的字符集 232

3.12.3  修改Linux系統的字符集 233

3.12.4  Unicode編碼的實現 233

3.12.5  C運行時庫對Unicode的支持 238

3.12.6  C++標準庫對Unicode的支持 238

3.12.7  字符集相關實例 239

第4章  Linux文件編程 240

4.1  文件系統及層次結構標準 240

4.2  文件的屬性信息 241

4.3  i節點 242

4.3.1  基本概念 242

4.3.2  i節點的內容 242

4.3.3  i節點的使用狀況 244

4.4  文件類型 246

4.4.1  普通文件 246

4.4.2  目錄 247

4.4.3  塊設備文件 248

4.4.4  字符設備文件 249

4.4.5  鏈接文件 249

4.5  文件權限 251

4.6  Linux文件I/O編程的基本方式 252

4.7  什麽是I/O 252

4.8  Linux系統調用下的文件I/O編程 252

4.8.1  文件描述符 252

4.8.2  打開或創建文件 253

4.8.3  創建文件 255

4.8.4  關閉文件 256

4.8.5  讀取文件中的數據 257

4.8.6  向文件寫入數據 259

4.8.7  設定文件偏移量 260

4.8.8  獲取文件狀態 262

4.8.9  文件鎖定 263

4.8.10  建立文件和內存映射 267

4.8.11  mmap和shm對比 270

4.9  C++方式下的文件I/O編程 271

4.9.1  流的概念 271

4.9.2  流的類庫 271

4.9.3  打開文件 272

4.9.4  關閉文件 274

4.9.5  寫入文件 274

4.9.6  讀取文件 274

4.9.7  文件位置指針 276

4.9.8  狀態標志符的驗證 278

4.9.9  讀寫文件數據塊 279

4.10  文件編程中的其他操作 281

4.10.1  獲取文件有關信息 281

4.10.2  創建和刪除文件目錄項 283

第5章  多進程編程 286

5.1  進程的基本概念 286

5.2  進程的描述 287

5.2.1  進程的標識符 289

5.2.2  PID文件 291

5.3  進程的創建 294

5.3.1  使用fork創建進程 294

5.3.2  使用exec創建進程 295

5.3.3  使用system創建進程 301

5.4  進程調度 302

5.5  進程的分類 305

5.5.1  前臺進程 305

5.5.2  後台進程 305

5.6  守護進程 306

5.6.1  守護進程的概念 306

5.6.2  守護進程的特點 307

5.6.3  查看守護進程 307

5.6.4  守護進程的分類 308

5.6.5  守護進程的常用啟動方式 309

5.6.6  編寫守護進程的步驟 309

第6章  Linux進程間的通信 312

6.1  信號 312

6.1.1  信號的基本概念 312

6.1.2  與信號相關的系統調用 317

6.2  管道 325

6.2.1  管道的基本概念 325

6.2.2  管道讀寫的特點 325

6.2.3  管道的局限性 326

6.2.4  創建管道函數pipe 326

6.2.5  讀寫管道函數read/write 326

6.2.6  等待子進程中斷或結束的函數wait 327

6.2.7  使用管道的特殊情況 330

6.3  消息隊列 330

6.3.1  創建和打開消息隊列函數msgget 331

6.3.2  獲取和設置消息隊列的屬性函數msgctl 332

6.3.3  將消息送入消息隊列的函數msgsnd 333

6.3.4  從消息隊列中讀取一條新消息的函數msgrcv 333

6.3.5  生成鍵值函數ftok 334

第7章  C++ Web編程 342

7.1  CGI程序的工作方式 342

7.2  架設Web服務器Apache 343

第8章  多線程基本編程 346

8.1  使用多線程的好處 346

8.2  多線程編程的基本概念 347

8.2.1  操作系統和多線程 347

8.2.2  線程的基本概念 348

8.2.3  線程的狀態 348

8.2.4  線程函數 349

8.2.5  線程標識 349

8.2.6  C++多線程開發的兩種方式 349

8.3  利用POSIX多線程API函數進行多線程開發 350

8.3.1  線程的創建 350

8.3.2  線程的屬性 355

8.3.3  線程的結束 366

8.3.4  線程退出時的清理機會 374

8.4  C++11中的線程類 379

8.4.1  線程的創建 380

8.4.2  線程的標識符 387

8.4.3  當前線程this_thread 388

第9章  多線程高級編程 393

9.1  多線程的同步和異步 393

9.2  線程同步 393

9.3  利用POSIX多線程API函數進行線程同步 398

9.3.1  互斥鎖 398

9.3.2  讀寫鎖 404

9.3.3  條件變量 411

9.4  C++11/14中的線程同步 417

9.5  線程池 421

9.5.1  線程池的定義 421

9.5.2  使用線程池的原因 421

9.5.3  用C++實現一個簡單的線程池 422

第10章  Linux下的庫 428

10.1  庫的基本概念 428

10.2  庫的分類 428

10.3  靜態庫 429

10.3.1  靜態庫的基本概念 429

10.3.2  靜態庫的創建和使用 429

10.4  動態庫 432

10.4.1  動態庫的基本概念 432

10.4.2  動態庫的創建和使用 432

第11章  TCP/IP基礎 437

11.1  什麽是TCP/IP 437

11.2  TCP/IP的分層結構 437

11.3  應用層 441

11.3.1  DNS 441

11.3.2  埠的概念 442

11.4  傳輸層 442

11.4.1  TCP 442

11.4.2  UDP 443

11.5  網絡層 443

11.5.1  IP 443

11.5.2  ARP 449

11.5.3  RARP 451

11.5.4  ICMP 452

11.6  數據鏈路層 459

11.6.1  數據鏈路層的基本概念 459

11.6.2  數據鏈路層的主要功能 460

第12章  套接字基礎 462

12.1  網絡程序的架構 463

12.2  套接字的類型 464

12.3  套接字的地址結構 464

12.4  主機字節序和網絡字節序 465

12.5  出錯信息的獲取 467

第13章  TCP套接字編程 469

13.1  TCP套接字編程的基本步驟 469

13.2  協議簇和地址簇 470

13.3  socket地址 473

13.3.1  通用socket地址 473

13.3.2  專用socket地址 474

13.3.3  IP地址的轉換 475

13.4  TCP套接字編程的相關函數 477

13.4.1  socket函數 477

13.4.2  bind函數 477

13.4.3  listen函數 480

13.4.4  accept函數 480

13.4.5  connect函數 480

13.4.6  write函數 483

13.4.7  read函數 484

13.4.8  send函數 484

13.4.9  recv函數 484

13.4.10  close函數 485

13.4.11  獲得套接字地址 485

13.4.12  獲得主機名稱和主機信息 487

13.4.13  阻塞套接字的使用 489

13.4.14  非阻塞套接字的使用 496

 

第14章  UDP套接字編程 509

14.1  UDP套接字編程的基本步驟 509

14.2  UDP套接字編程的相關函數 510

14.2.1  消息發送函數sendto和sendmsg 510

14.2.2  消息接收函數recvfrom和recvmsg 512

14.3  實戰UDP套接字 513

14.4  UDP丟包及無序問題 522

第15章  原始套接字編程 523

15.1  原始套接字概述 523

15.2  與標準套接字的區別 523

15.3  原始套接字的編程方法 524

15.4  面向鏈路層的原始套接字編程函數 524

15.4.1  創建原始套接字函數socket 524

15.4.2  接收函數recvfrom 525

15.4.3  發送函數sendto 526

15.5  以太網幀格式 529

15.6  獲取網絡接口的信息 530

15.7  實戰鏈路層的原始套接字 534

15.7.1  常見的應用場景 534

15.7.2  混雜模式 560

15.7.3  鏈路層原始套接字開發註意事項 579

15.8  面向IP層的原始套接字編程 580

第16章  並發聊天服務器項目實戰 588

16.1  系統平臺的選擇 588

16.1.1  應用系統平臺模式的選擇 588

16.1.2  C/S模式介紹 589

16.1.3  數據庫系統的選擇 590

16.2  系統需求分析 590

16.2.1  即時消息的一般需求 590

16.2.2  即時消息的協議需求 590

16.2.3  即時消息的安全需求 591

16.2.4  即時消息的加密和鑒別 591

16.2.5  即時消息的註冊需求 591

16.2.6  即時消息的通信需求 591

16.3  系統總體設計 591

16.4  即時通信系統的實施原理 592

16.4.1  IM的工作方式 593

16.4.2  IM的基本技術原理 593

16.4.3  IM的通信方式 593

16.5  功能模塊劃分 594

16.5.1  模塊劃分 594

16.5.2  服務器端功能 595

16.5.3  客戶端功能 595

16.5.4  服務器端多線程 595

16.5.5  客戶端多線程 596

16.6  數據庫設計 596

16.6.1  數據庫的選擇 596

16.6.2  準備MySQL環境 597

16.6.3  Linux下的MySQL的C編程 601

16.6.4  聊天系統數據庫設計 607

16.7  服務器端設計 608

16.8  客戶端設計 616