《Linux C編程完全解密》以Red Hat 9.0 和Ubuntu 12.01 為平臺,系統(tǒng)地介紹了Linux 操作系統(tǒng)下的各種shell 命令以及在此平臺下進行C 語言開發(fā)的步驟和方法,并通過大量實例講解在Linux 下進行C 語言開發(fā)的方法和技巧。 《Linux C編程完全解密》共13 章,包括Linux 操作系統(tǒng)概述,Linux 的基本操作,文本編輯器,Linux 下的C 語言開發(fā)基礎(chǔ),靜態(tài)庫和動態(tài)庫,make 工程管理,文件編程,shell 腳本的開發(fā),進程管理,進程間通信(IPC), POSIX 線程,Linux 網(wǎng)絡(luò)編程,Linux 驅(qū)動程序和嵌入式基礎(chǔ)。同時還配有綜合項目實戰(zhàn)環(huán)節(jié)的源代碼, 使讀者能夠在此基礎(chǔ)上舉一反三,提升開發(fā)應(yīng)用項目的能力。 《Linux C編程完全解密》結(jié)構(gòu)合理、內(nèi)容全面、深入淺出、通俗易懂,具有很強的參考性和實用性。可作為普通高等院校計算機及相關(guān)專業(yè)進行Linux 平臺下C 語言程序設(shè)計的教材,也可作為程序開發(fā)員的參考用書。
Linux系統(tǒng)是當下主流的操作系統(tǒng)之一,越來越多的開發(fā)者學(xué)習(xí)Linux開發(fā)技術(shù),特別是基于Linux系統(tǒng)上的C語言開發(fā)技術(shù)。《Linux C編程完全解密》全面介紹了Linux系統(tǒng)上C語言開發(fā)技術(shù),大量實例貫穿全書,由淺入深地講解力求使讀者在學(xué)習(xí)后,能夠全面掌握Linux平臺下的開發(fā)技能。
前言
Linux 系統(tǒng)基于開源軟件思想,是當下最流行的操作系統(tǒng)之一。隨著Linux 系統(tǒng)的發(fā)展和廣泛應(yīng)用,其已占據(jù)絕大多數(shù)嵌入式系統(tǒng)和PC 服務(wù)器的市場份額,且桌面系統(tǒng)的普及率也在逐年上升。越來越多的開發(fā)者希望了解Linux 系統(tǒng)開發(fā)技術(shù),特別是基于Linux 系統(tǒng)上流行的C 語言開發(fā)技術(shù)。
本書全面介紹了Linux 系統(tǒng)上C 語言開發(fā)技術(shù),大量實例貫穿全書,由淺入深,力求使讀者在學(xué)習(xí)后,能夠掌握Linux 平臺下的開發(fā)技能,并通過大量的項目實戰(zhàn),培養(yǎng)綜合實踐能力。
本書特點
1. 提供Ubuntu 免安裝文件和Red Hat 安裝鏡像
為了讓讀者更好地按照本書的內(nèi)容進行學(xué)習(xí),做到無障礙學(xué)習(xí)測試,作者提供了開發(fā)工具和環(huán)境,包括兩個Linux 發(fā)行版本和VMware 10 的安裝文件。
2. 配有大量實例源代碼
為了讓讀者更加快速、直觀地學(xué)習(xí)本書內(nèi)容,在每個章節(jié)都安排了實例講解。另外,一些重要章節(jié)的課后上機習(xí)題也附有源代碼供讀者參考。
3. 循序漸進,由淺入深
工欲善其事,必先利其器。為了方便讀者學(xué)習(xí),本書首先介紹了Linux 操作系統(tǒng)平臺下終端命令的使用方法和技巧。在此基礎(chǔ)上,學(xué)習(xí)如何在Linux 系統(tǒng)下進行C 語言的開發(fā)。通過基礎(chǔ)實例講解和項目實戰(zhàn)逐步培養(yǎng)學(xué)習(xí)能力,能夠舉一反三,具備一定的應(yīng)用開發(fā)能力。
4. 項目實戰(zhàn)案例
本書安排了兩個項目實戰(zhàn),分別是模擬ATM 功能和局域網(wǎng)內(nèi)的聊天程序。項目實戰(zhàn)旨在培養(yǎng)綜合運用知識的能力,能夠?qū)λ鶎W(xué)知識進行有效整合,提高項目開發(fā)的能力和水平。
本書內(nèi)容
第1章:介紹Linux操作系統(tǒng)的發(fā)展背景和特點。Linux系統(tǒng)是一個開放的操作系統(tǒng),在學(xué)習(xí)的同時,可根據(jù)自身需要安裝Linux操作系統(tǒng),為實踐各種開發(fā)技能打好基礎(chǔ)。
第2章:介紹了Linux系統(tǒng)的基本操作,包括shell命令的基本使用、目錄及文件的相關(guān)操作命令、軟件包的安裝等內(nèi)容。
第3章:介紹了Linux平臺下的vi文本編輯器,通過本章的學(xué)習(xí),會使用該編輯器編寫C源文件。
第4章:介紹了Linux系統(tǒng)下C語言開發(fā)步驟,包括編譯C語言的編譯器gcc基本概念及編譯過程和IDE集成開發(fā)環(huán)境的安裝和使用。
第5章:介紹了動態(tài)庫和靜態(tài)庫的應(yīng)用,包括庫的概述,靜態(tài)庫和動態(tài)庫的創(chuàng)建步驟以及通過實例講解靜態(tài)庫和動態(tài)庫的區(qū)別。
第6章:介紹了make工程管理,包括make工程管理的作用,如何為項目編寫規(guī)則文件,automake的使用方法以及相關(guān)的實例講解。
第7章:介紹了文件編程,包括基本的I/O函數(shù)的使用方法和技巧,文件鎖的概念和使用,以及ATM項目實戰(zhàn)。
第8章:介紹了shell腳本的開發(fā),包括shell編程基礎(chǔ)和shell腳本的語法,為了更好地掌握本章內(nèi)容,特別布置了shell腳本設(shè)計示例。
第9章:介紹了Linux系統(tǒng)下的進程管理,包括進程的概念,進程控制等。其中進程控制中主要介紹了進程創(chuàng)建函數(shù)fork、進程等待函數(shù)wait及waitpid函數(shù)的用法。
第10章:介紹了進程間的通信機制,包括管道、信號、信號量、共享內(nèi)存、消息隊列等通信機制的特點和應(yīng)用,并進行了實例講解。
第11章:介紹了POSIX線程,包括線程創(chuàng)建,線程等待,線程銷毀和線程同步。本章最后通過項目實戰(zhàn)聊天室的設(shè)計與實現(xiàn),對本章內(nèi)容進行了練習(xí)。
第12章:介紹了Linux下的網(wǎng)絡(luò)編程的方法和步驟,包括網(wǎng)絡(luò)編程的基礎(chǔ)知識,socket實現(xiàn)本地通信和網(wǎng)絡(luò)通信的編程思路和步驟,最后通過多客戶通信的實例將本章內(nèi)容與第9章內(nèi)容結(jié)合運用,以提高綜合運用能力。
第13章:介紹了Linux在嵌入式方向的應(yīng)用,包括Linux驅(qū)動程序和嵌入式開發(fā)基礎(chǔ),嵌入式Linux開發(fā)的一般流程及開發(fā)中需要注意的問題,最后總結(jié)了Linux嵌入式開發(fā)的應(yīng)用特點。
本書由唐山師范學(xué)院的閆敬、吳淑坤老師編寫完成。書中實例代碼經(jīng)過嚴格測試可以直接運行。同時對參與本書代碼錄入、語法校正等工作的同事們表示由衷的感謝!
由于作者水平有限,時間倉促,書中難免有錯誤和不妥之處,敬請讀者批評指正。
編 者
作者具有10年以上的linux C使用經(jīng)驗,對linux系統(tǒng)有較深的理解,熟悉linux應(yīng)用程序設(shè)計和驅(qū)動程序設(shè)計。
第1章 Linux操作系統(tǒng)概述 1
1.1 認識Linux操作系統(tǒng) 2
1.1.1 Linux操作系統(tǒng)發(fā)展背景 2
1.1.2 Linux操作系統(tǒng)的特點 2
1.1.3 Linux操作系統(tǒng)的應(yīng)用現(xiàn)狀 3
1.2 Linux C開發(fā)概述 3
1.2.1 Linux C開發(fā)簡介 3
1.2.2 IEEE POSIX 4
1.2.3 Linux C 開發(fā)工具 4
1.3 小結(jié) 4
習(xí)題 4
第2章 Linux的基本操作 7
2.1 shell初體驗 8
2.1.1 虛擬終端 8
2.1.2 shell命令 8
2.2 shell常用命令 9
2.2.1 目錄和文件操作命令 9
2.2.2 文件歸檔及壓縮 15
2.2.3 軟件包的安裝 17
2.3 深入shell 18
2.3.1 通配符 18
2.3.2 重定向 18
2.3.3 管道 19
2.3.4 自動補全 19
2.3.5 用戶操作命令 20
2.3.6 關(guān)機與重啟 21
2.4 硬鏈接與軟鏈接 22
2.4.1 硬鏈接 23
2.4.2 軟鏈接 24
2.5 小結(jié) 24
習(xí)題 25
第3章 文本編輯器 27
3.1 vi編輯器概述 28
3.1.1 vi的三種工作模式 28
3.1.2 vi的初體驗 28
3.2 命令模式下的文本塊操作 29
3.2.1 行的定位 29
3.2.2 文本塊的復(fù)制、移動和刪除 30
3.2.3 撤銷和重復(fù) 31
3.2.4 字符串的查找 31
3.3 末行模式下的常用操作 31
3.4 vi環(huán)境定制 32
3.5 小結(jié) 33
習(xí)題 33
第4章 Linux下的C語言開發(fā)基礎(chǔ) 35
4.1 C語言開發(fā)的基本步驟 36
4.1.1 gcc編譯工具 36
4.1.2 gcc 編譯過程詳解 37
4.1.3 gcc 編譯多文件 39
4.2 頭文件 40
4.2.1 頭文件的編輯和使用 40
4.2.2 進一步理解頭文件 42
4.2.3 頭文件重復(fù)包含 43
4.3 gdb 調(diào)試工具 44
4.3.1 gdb 調(diào)試基本命令 44
4.3.2 gdb 初體驗 46
4.3.3 gdb 的斷點調(diào)試 48
4.4 IDE 工具 CodeBlocks 51
4.4.1 CodeBlocks 的安裝 51
4.4.2 CodeBlocks 的使用 52
4.5 小結(jié) 55
習(xí)題 55
第5 章 靜態(tài)庫和動態(tài)庫 57
5.1 庫的概述 58
5.1.1 為什么使用庫 58
5.1.2 庫的特點 58
5.2 靜態(tài)庫 59
5.2.1 靜態(tài)庫的創(chuàng)建 59
5.2.2 靜態(tài)庫的使用 60
5.3 動態(tài)庫 61
5.3.1 動態(tài)庫的創(chuàng)建 61
5.3.2 動態(tài)庫的使用 62
5.4 靜態(tài)庫和動態(tài)庫的區(qū)別 62
5.4.1 實例測試 63
5.4.2 驗證環(huán)節(jié) 63
5.5 綜合舉例 65
5.6 小結(jié) 66
習(xí)題 66
第6 章 make 工程管理 69
6.1 make 概述 70
6.1.1 make 命令和Makefile 文件 70
6.1.2 Makefile 文件編寫 70
6.1.3 Makefile 文件中的變量 72
6.1.4 Makefile 通配符 73
6.1.5 Makefile 文件的默認規(guī)則 74
6.1.6 Makefile 文件中的偽目標 75
6.1.7 make 的條件執(zhí)行 76
6.2 automake 的使用 76
6.2.1 automake 生成Makefile步驟 76
6.2.2 實例講解 77
6.3 小結(jié) 80
習(xí)題 80
第7 章 Linux 下的文件編程 81
7.1 概述 82
7.1.1 Linux 下的系統(tǒng)調(diào)用 82
7.1.2 基本I/O 函數(shù) 82
7.1.3 文件描述符 83
7.2 基本I/O 操作 83
7.2.1 open 函數(shù) 84
7.2.2 close 函數(shù) 86
7.2.3 write 函數(shù) 87
7.2.4 read 函數(shù) 88
7.2.5 lseek 函數(shù) 90
7.3 文件鎖 91
7.3.1 Linux 下的文件鎖機制 93
7.3.2 文件鎖的使用 93
7.3.3 實例講解 94
7.4 目錄操作 97
7.4.1 mkdir 函數(shù) 97
7.4.2 rmdir 函數(shù) 98
7.4.3 getcwd 函數(shù) 99
7.4.4 opendir 函數(shù) 99
7.4.5 readdir 函數(shù) 100
7.4.6 closedir 函數(shù) 101
7.5 項目實戰(zhàn) 101
7.6 小結(jié) 110
習(xí)題 110
第8 章 shell 腳本的開發(fā) 113
8.1 shell 編程基礎(chǔ) 114
8.2 管道和重定向 114
8.2.1 輸出重定向 114
8.2.2 輸入重定向 115
8.2.3 管道 115
8.3 shell 腳本的語法 116
8.3.1 變量 117
8.3.2 程序結(jié)構(gòu) 118
8.3.3 函數(shù) 123
8.3.4 命令及其執(zhí)行 123
8.3.5 調(diào)試腳本 125
8.4 shell 腳本設(shè)計示例 125
8.4.1 查看主機網(wǎng)卡流量 125
8.4.2 監(jiān)控CPU 和內(nèi)存的使用情況 126
8.4.3 查找日期為某一天 126
8.5 小結(jié) 127
習(xí)題 127
第9 章 進程管理 129
9.1 進程概述 130
9.1.1 進程的概念 130
9.1.2 進程ID 130
9.1.3 進程調(diào)度 131
9.2 進程控制 132
9.2.1 進程控制塊 132
9.2.2 進程創(chuàng)建函數(shù)(fork) 133
9.2.3 進程等待函數(shù)(wait) 138
9.2.4 waitpid 函數(shù) 139
9.2.5 vfork 函數(shù) 142
9.2.6 進程終止函數(shù)(exit) 143
9.2.7 exec 函數(shù) 145
9.3 小結(jié) 146
習(xí)題 146
第10 章 進程間通信(IPC) 149
10.1 進程通信概述 150
10.1.1 管道 150
10.1.2 信號 153
10.1.3 信號的產(chǎn)生方式 154
10.1.4 信號的處理方式 154
10.2 信號量 156
10.2.1 信號量定義 157
10.2.2 信號量功能 157
10.2.3 使用信號量 164
10.3 共享內(nèi)存 167
10.3.1 認識共享內(nèi)存 167
10.3.2 共享內(nèi)存函數(shù) 168
10.4 消息隊列 173
10.4.1 消息隊列概述 174
10.4.2 消息隊列函數(shù) 176
10.4.3 消息隊列編程實例 179
10.4.4 ATM 的實現(xiàn) 183
10.5 小結(jié) 189
習(xí)題 189
第11 章 POSIX 線程 191
11.1 認識線程 192
11.2 多線程編程 194
11.2.1 線程創(chuàng)建函數(shù) 195
11.2.2 多線程中的線程等待 198
11.2.3 線程專有數(shù)據(jù) 199
11.2.4 保證多線程編程中函數(shù)的可重入性 202
11.3 線程的屬性 203
11.3.1 常用線程屬性 203
11.3.2 常用線程屬性函數(shù) 205
11.4 線程的銷毀 206
11.5 線程的同步 209
11.5.1 用信號量進行同步 209
11.5.2 用互斥量進行同步 211
11.6 聊天室的實現(xiàn) 214
11.7 小結(jié) 219
習(xí)題 219
第12 章 Linux 網(wǎng)絡(luò)編程 221
12.1 網(wǎng)絡(luò)編程常識 222
12.1.1 TCP/IP 協(xié)議概述 222
12.1.2 IP 地址與端口 223
12.1.3 網(wǎng)絡(luò)字節(jié)序和主機字節(jié)序 224
12.2 簡單的本地通信 225
12.2.1 socket 實現(xiàn)本地通信 226
12.2.2 相關(guān)API 詳解 226
12.3 socket 實現(xiàn)網(wǎng)絡(luò)通信 230
12.3.1 基于TCP 的網(wǎng)絡(luò)編程 230
12.3.2 相關(guān)API 詳解 230
12.3.3 基于UDP 的網(wǎng)絡(luò)編程 234
12.4 守護進程 237
12.4.1 守護進程概念 237
12.4.2 守護進程的編寫要點 238
12.5 多客戶通信 242
12.6 小結(jié) 245
習(xí)題 246
第13 章 Linux 驅(qū)動程序和嵌入式基礎(chǔ) 249
13.1 Linux 驅(qū)動程序與嵌入式開發(fā)的基礎(chǔ)知識 250
13.1.1 嵌入式Linux 的特點 250
13.1.2 嵌入式Linux 的系統(tǒng)開發(fā)平臺 251
13.1.3 嵌入式Linux 開發(fā)的一般流程 251
13.1.4 嵌入式Linux 驅(qū)動程序 252
13.2 Linux 驅(qū)動程序與嵌入式開發(fā)中的注意問題 253
13.2.1 Linux 的內(nèi)存空間劃分 253
13.2.2 Linux 的內(nèi)存管理和IO尋址 253
13.2.3 Linux 的時基問題 254
13.3 Linux 驅(qū)動程序和嵌入式開發(fā)的設(shè)備類型 254
13.3.1 字符設(shè)備特點 255
13.3.2 塊設(shè)備特點 255
13.4 Linux 嵌入式開發(fā)的應(yīng)用特點 255
13.4.1 常用的調(diào)試方法 255
13.4.2 可移植性問題 256
13.5 小結(jié) 256
習(xí)題 257
附錄 習(xí)題答案 259