Linux C與C++一線開發實踐
朱文偉 李建英
買這商品的人也買了...
-
$490$417 -
$650$507 -
$800$632 -
$800$632 -
$420$332 -
$460$363 -
$899$854 -
$534$507 -
$252$239 -
$780$616 -
$600$468 -
$520$411 -
$505Linux C/C++ 服務器開發實踐
-
$713JUnit 實戰, 3/e
-
$516高性能 Linux 網絡編程核心技術揭秘
-
$780$616 -
$779$740 -
$414$393 -
$1,280$1,011 -
$600$474 -
$1,200$948 -
$390$308 -
$1,374$1,305 -
$880$695 -
$850$672
相關主題
商品描述
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