商品描述
本書基於Linux內核,以Ubuntu Linux平臺為例,介紹Linux系統程序設計的基礎知識,為準備學習Linux系統程序開發的初學者提供方便快捷的途徑。全書共12章。第1章介紹Linux系統的基本使用方法;第2章介紹Linux平臺下進行C語言開發需要的各種工具;第3章介紹Linux平臺下常用的編程基礎知識;第4~6章介紹文件、文件屬性、目錄文件相關的編程理論和方法;第7、8章介紹進程和線程的編程方法;第9~11章介紹信號、管道、信號量、共享內存、消息隊列、套接字6種進程間通信方式;第12章介紹兩個貫穿本書大多數知識點的綜合案例。本書可作為高等院校計算機科學與技術、軟件工程、物聯網工程等相關專業“Linux系統程序設計”相關課程的教材,也可作為相關工程技術人員和計算機愛好者的參考書。
目錄大綱
第1章 Linux基礎 1
1.1 UNIX/Linux簡介 1
1.1.1 UNIX簡介 1
1.1.2 UNIX體系結構 2
1.1.3 Linux簡介 2
1.1.4 Linux版本說明 3
1.1.5 Linux特點 4
1.2 庫函數與系統調用 5
1.3 Linux常用命令 6
1.3.1 用戶和用戶組命令 6
1.3.2 文件和目錄命令 8
1.3.3 進程命令 10
1.3.4 獲取幫助信息 11
1.4 案例1:通過SSH終端登錄Linux系統 13
1.4.1 分析與設計 13
1.4.2 實施 13
1.4.3 運行 17
習題 19
第2章 Linux系統開發環境 21
2.1 Vim編輯器 21
2.1.1 Vim編輯器的工作模式 21
2.1.2 Vim編輯器的基本用法 22
2.1.3 Vim編輯器的高級用法 23
2.2 GCC編譯器 24
2.2.1 GCC編譯器介紹 24
2.2.2 GCC編譯器基本用法 25
2.3 Makefile文件的使用 28
2.3.1 Makefile文件 28
2.3.2 Makefile文件的命名 29
2.3.3 Makefile文件的調用 29
2.3.4 Makefile文件的內容 30
2.3.5 make命令的特殊用法 33
2.4 輸出調試及GDB調試器 34
2.4.1 輸出調試 35
2.4.2 GDB調試器 35
2.5 庫 39
2.5.1 庫相關概念 39
2.5.2 靜態庫和共享庫 40
2.6 案例2:簡易學生成績計算 42
2.6.1 分析與設計 42
2.6.2 實施 43
2.6.3 編譯與運行 43
習題 44
第3章 Linux程序設計初步 46
3.1 程序及進程的存儲結構 46
3.2 變量的類型修飾符 47
3.3 命令行參數及獲取 49
3.3.1 命令行參數 49
3.3.2 getopt函數獲取命令行參數 50
3.4 環境變量 53
3.4.1 Shell的環境變量 53
3.4.2 環境變量的相關命令 54
3.4.3 環境變量函數 55
3.5 時間管理 56
3.6 錯誤代碼 59
3.7 標準I/O與文件I/O 61
3.8 案例3:設置環境變量 62
3.8.1 分析與設計 62
3.8.2 實施 63
3.8.3 編譯與運行 63
習題 64
第4章 文件I/O 66
4.1 文件系統簡介 66
4.1.1 UNIX/Linux文件系統概述 67
4.1.2 虛擬文件系統(VFS) 68
4.1.3 索引節點(inode) 68
4.1.4 文件的類型 69
4.1.5 文件的訪問權限 71
4.2 訪問文件的內核數據結構 73
4.3 文件基本I/O操作 74
4.3.1 打開/創建文件 74
4.3.2 讀文件 78
4.3.3 寫文件 79
4.3.4 文件定位 80
4.3.5 關閉文件 82
4.3.6 文件操作舉例 82
4.4 文件訪問的同步 84
4.5 案例4:文件復制命令的實現 84
4.5.1 分析與設計 84
4.5.2 實施 85
4.5.3 編譯與運行 85
習題 86
第5章 文件屬性 88
5.1 獲取文件屬性 88
5.2 用戶/組ID與名字的轉換 90
5.2.1 用戶和組 90
5.2.2 獲取文件的用戶和組的信息 91
5.3 硬鏈接與符號鏈接 93
5.3.1 硬鏈接與符號鏈接的區別 93
5.3.2 相關的系統調用 95
5.4 dup/dup2 95
5.4.1 輸入/輸出重定向 95
5.4.2 系統調用dup/dup2 96
5.5 文件屬性的修改 98
5.5.1 修改文件屬性 98
5.5.2 改變文件所有者及所屬組chown/fchown/lchown 99
5.5.3 改變文件訪問權限chmod/fchmod 100
5.5.4 改變文件時間utime 100
5.5.5 改變文件長度truncate/ftruncate 101
5.6 案例5:顯示文件長格式信息 101
5.6.1 分析與設計 101
5.6.2 實施 101
5.6.3 編譯與運行 102
習題 104
第6章 目錄文件管理 106
6.1 目錄基本操作 106
6.1.1 打開目錄 106
6.1.2 讀目錄 106
6.1.3 關閉目錄 107
6.2 目錄其他操作 108
6.2.1 切換當前目錄 108
6.2.2 創建目錄 109
6.2.3 刪除目錄 110
6.2.4 目錄指針定位 110
6.3 案例6:顯示指定目錄下文件列表 110
6.3.1 分析與設計 110
6.3.2 實施 111
6.3.3 編譯與運行 115
習題 118
第7章 進程控制 119
7.1 進程基本概念 119
7.1.1 進程和進程控制塊 119
7.1.2 進程標識 120
7.1.3 用戶標識 120
7.2 進程控制 123
7.2.1 創建進程 123
7.2.2 exec*系列函數 129
7.2.3 進程終止 133
7.2.4 等待進程結束 134
7.2.5 system函數 139
7.3 什麼是Shell 140
7.3.1 用戶登錄Shell 140
7.3.2 Shell執行命令 141
7.4 案例7:實現簡單的Shell 141
7.4.1 分析與設計 141
7.4.2 實施 142
7.4.3 編譯與運行 142
習題 143
第8章 線程 144
8.1 線程概念 144
8.2 線程基本操作 145
8.3 線程間通信 150
8.3.1 互斥鎖 150
8.3.2 條件變量 152
8.3.3 無名信號量 153
8.3.4 讀寫鎖 154
8.3.5 自旋鎖和屏障 154
8.4 線程私有數據 154
8.5 案例8:線程 157
8.5.1 分析與設計 157
8.5.2 實施 158
8.5.3 編譯與運行 158
習題 159
第9章 信號與管道 161
9.1 信號 161
9.1.1 信號的概念 161
9.1.2 信號的產生 162
9.1.3 信號的響應方式 167
9.1.4 sleep函數和系統調用pause 170
9.1.5 信號集 173
9.2 管道 177
9.2.1 無名管道 177
9.2.2 有名管道 181
習題 182
第10章 進程間通信 184
10.1 System V IPC簡介 184
10.2 System V信號量 186
10.3 System V共享內存 189
10.4 System V消息隊列 191
習題 195
第11章 網絡編程 196
11.1 網絡編程基本概念 196
11.1.1 常用網絡相關命令和配置文件 196
11.1.2 軟件體系結構 200
11.1.3 網絡協議及OSI參考模型 202
11.1.4 IP地址和端口 204
11.1.5 字節順序 206
11.1.6 網絡數據傳輸方式 208
11.2 套接字編程基礎 209
11.2.1 套接字簡介 209
11.2.2 套接字地址結構 210
11.2.3 面向連接套接字通信過程 211
11.2.4 面向無連接套接字通信過程 213
11.3 套接字編程相關的系統調用 214
11.3.1 系統調用socket 214
11.3.2 系統調用bind 215
11.3.3 系統調用listen 216
11.3.4 系統調用accept 216
11.3.5 系統調用connect 217
11.3.6 系統調用send 219
11.3.7 系統調用sendto 220
11.3.8 系統調用recv 221
11.3.9 系統調用recvfrom 222
11.3.10 系統調用close 225
11.3.11 系統調用shutdown 225
11.4 案例9:基於網絡的進程間通信 225
11.4.1 分析與設計 225
11.4.2 實施 226
11.4.3 編譯與運行 226
11.5 基於UDP的網絡編程 231
11.6 域名解析 232
11.6.1 域名解析 232
11.6.2 IP地址形式轉換 233
11.6.3 IP地址與主機名 235
習題 238
第12章 綜合案例 239
12.1 Linux網絡傳輸系統 239
12.1.1 構思 239
12.1.2 設計 239
12.1.3 實施 241
12.1.4 運行 247
12.2 簡易的文件傳輸系統 249
12.2.1 構思 249
12.2.2 設計 249
12.2.3 實施 251
12.2.4 運行 263
習題 265
附錄A Linux主要的系統調用 266
附錄B ASCII碼 270
參考文獻 272
