《Linux C編程完全解密》以Red Hat 9.0 和Ubuntu 12.01 為平臺(tái),系統(tǒng)地介紹了Linux 操作系統(tǒng)下的各種shell 命令以及在此平臺(tái)下進(jìn)行C 語言開發(fā)的步驟和方法,并通過大量實(shí)例講解在Linux 下進(jìn)行C 語言開發(fā)的方法和技巧。 《Linux C編程完全解密》共13 章,包括Linux 操作系統(tǒng)概述,Linux 的基本操作,文本編輯器,Linux 下的C 語言開發(fā)基礎(chǔ),靜態(tài)庫和動(dòng)態(tài)庫,make 工程管理,文件編程,shell 腳本的開發(fā),進(jìn)程管理,進(jìn)程間通信(IPC), POSIX 線程,Linux 網(wǎng)絡(luò)編程,Linux 驅(qū)動(dòng)程序和嵌入式基礎(chǔ)。同時(shí)還配有綜合項(xiàng)目實(shí)戰(zhàn)環(huán)節(jié)的源代碼, 使讀者能夠在此基礎(chǔ)上舉一反三,提升開發(fā)應(yīng)用項(xiàng)目的能力。 《Linux C編程完全解密》結(jié)構(gòu)合理、內(nèi)容全面、深入淺出、通俗易懂,具有很強(qiáng)的參考性和實(shí)用性。可作為普通高等院校計(jì)算機(jī)及相關(guān)專業(yè)進(jìn)行Linux 平臺(tái)下C 語言程序設(shè)計(jì)的教材,也可作為程序開發(fā)員的參考用書。
Linux系統(tǒng)是當(dāng)下主流的操作系統(tǒng)之一,越來越多的開發(fā)者學(xué)習(xí)Linux開發(fā)技術(shù),特別是基于Linux系統(tǒng)上的C語言開發(fā)技術(shù)!禠inux C編程完全解密》全面介紹了Linux系統(tǒng)上C語言開發(fā)技術(shù),大量實(shí)例貫穿全書,由淺入深地講解力求使讀者在學(xué)習(xí)后,能夠全面掌握Linux平臺(tái)下的開發(fā)技能。
前言
Linux 系統(tǒng)基于開源軟件思想,是當(dāng)下最流行的操作系統(tǒng)之一。隨著Linux 系統(tǒng)的發(fā)展和廣泛應(yīng)用,其已占據(jù)絕大多數(shù)嵌入式系統(tǒng)和PC 服務(wù)器的市場(chǎng)份額,且桌面系統(tǒng)的普及率也在逐年上升。越來越多的開發(fā)者希望了解Linux 系統(tǒng)開發(fā)技術(shù),特別是基于Linux 系統(tǒng)上流行的C 語言開發(fā)技術(shù)。
本書全面介紹了Linux 系統(tǒng)上C 語言開發(fā)技術(shù),大量實(shí)例貫穿全書,由淺入深,力求使讀者在學(xué)習(xí)后,能夠掌握Linux 平臺(tái)下的開發(fā)技能,并通過大量的項(xiàng)目實(shí)戰(zhàn),培養(yǎng)綜合實(shí)踐能力。
本書特點(diǎn)
1. 提供Ubuntu 免安裝文件和Red Hat 安裝鏡像
為了讓讀者更好地按照本書的內(nèi)容進(jìn)行學(xué)習(xí),做到無障礙學(xué)習(xí)測(cè)試,作者提供了開發(fā)工具和環(huán)境,包括兩個(gè)Linux 發(fā)行版本和VMware 10 的安裝文件。
2. 配有大量實(shí)例源代碼
為了讓讀者更加快速、直觀地學(xué)習(xí)本書內(nèi)容,在每個(gè)章節(jié)都安排了實(shí)例講解。另外,一些重要章節(jié)的課后上機(jī)習(xí)題也附有源代碼供讀者參考。
3. 循序漸進(jìn),由淺入深
工欲善其事,必先利其器。為了方便讀者學(xué)習(xí),本書首先介紹了Linux 操作系統(tǒng)平臺(tái)下終端命令的使用方法和技巧。在此基礎(chǔ)上,學(xué)習(xí)如何在Linux 系統(tǒng)下進(jìn)行C 語言的開發(fā)。通過基礎(chǔ)實(shí)例講解和項(xiàng)目實(shí)戰(zhàn)逐步培養(yǎng)學(xué)習(xí)能力,能夠舉一反三,具備一定的應(yīng)用開發(fā)能力。
4. 項(xiàng)目實(shí)戰(zhàn)案例
本書安排了兩個(gè)項(xiàng)目實(shí)戰(zhàn),分別是模擬ATM 功能和局域網(wǎng)內(nèi)的聊天程序。項(xiàng)目實(shí)戰(zhàn)旨在培養(yǎng)綜合運(yùn)用知識(shí)的能力,能夠?qū)λ鶎W(xué)知識(shí)進(jìn)行有效整合,提高項(xiàng)目開發(fā)的能力和水平。
本書內(nèi)容
第1章:介紹Linux操作系統(tǒng)的發(fā)展背景和特點(diǎn)。Linux系統(tǒng)是一個(gè)開放的操作系統(tǒng),在學(xué)習(xí)的同時(shí),可根據(jù)自身需要安裝Linux操作系統(tǒng),為實(shí)踐各種開發(fā)技能打好基礎(chǔ)。
第2章:介紹了Linux系統(tǒng)的基本操作,包括shell命令的基本使用、目錄及文件的相關(guān)操作命令、軟件包的安裝等內(nèi)容。
第3章:介紹了Linux平臺(tái)下的vi文本編輯器,通過本章的學(xué)習(xí),會(huì)使用該編輯器編寫C源文件。
第4章:介紹了Linux系統(tǒng)下C語言開發(fā)步驟,包括編譯C語言的編譯器gcc基本概念及編譯過程和IDE集成開發(fā)環(huán)境的安裝和使用。
第5章:介紹了動(dòng)態(tài)庫和靜態(tài)庫的應(yīng)用,包括庫的概述,靜態(tài)庫和動(dòng)態(tài)庫的創(chuàng)建步驟以及通過實(shí)例講解靜態(tài)庫和動(dòng)態(tài)庫的區(qū)別。
第6章:介紹了make工程管理,包括make工程管理的作用,如何為項(xiàng)目編寫規(guī)則文件,automake的使用方法以及相關(guān)的實(shí)例講解。
第7章:介紹了文件編程,包括基本的I/O函數(shù)的使用方法和技巧,文件鎖的概念和使用,以及ATM項(xiàng)目實(shí)戰(zhàn)。
第8章:介紹了shell腳本的開發(fā),包括shell編程基礎(chǔ)和shell腳本的語法,為了更好地掌握本章內(nèi)容,特別布置了shell腳本設(shè)計(jì)示例。
第9章:介紹了Linux系統(tǒng)下的進(jìn)程管理,包括進(jìn)程的概念,進(jìn)程控制等。其中進(jìn)程控制中主要介紹了進(jìn)程創(chuàng)建函數(shù)fork、進(jìn)程等待函數(shù)wait及waitpid函數(shù)的用法。
第10章:介紹了進(jìn)程間的通信機(jī)制,包括管道、信號(hào)、信號(hào)量、共享內(nèi)存、消息隊(duì)列等通信機(jī)制的特點(diǎn)和應(yīng)用,并進(jìn)行了實(shí)例講解。
第11章:介紹了POSIX線程,包括線程創(chuàng)建,線程等待,線程銷毀和線程同步。本章最后通過項(xiàng)目實(shí)戰(zhàn)聊天室的設(shè)計(jì)與實(shí)現(xiàn),對(duì)本章內(nèi)容進(jìn)行了練習(xí)。
第12章:介紹了Linux下的網(wǎng)絡(luò)編程的方法和步驟,包括網(wǎng)絡(luò)編程的基礎(chǔ)知識(shí),socket實(shí)現(xiàn)本地通信和網(wǎng)絡(luò)通信的編程思路和步驟,最后通過多客戶通信的實(shí)例將本章內(nèi)容與第9章內(nèi)容結(jié)合運(yùn)用,以提高綜合運(yùn)用能力。
第13章:介紹了Linux在嵌入式方向的應(yīng)用,包括Linux驅(qū)動(dòng)程序和嵌入式開發(fā)基礎(chǔ),嵌入式Linux開發(fā)的一般流程及開發(fā)中需要注意的問題,最后總結(jié)了Linux嵌入式開發(fā)的應(yīng)用特點(diǎn)。
本書由唐山師范學(xué)院的閆敬、吳淑坤老師編寫完成。書中實(shí)例代碼經(jīng)過嚴(yán)格測(cè)試可以直接運(yùn)行。同時(shí)對(duì)參與本書代碼錄入、語法校正等工作的同事們表示由衷的感謝!
由于作者水平有限,時(shí)間倉促,書中難免有錯(cuò)誤和不妥之處,敬請(qǐng)讀者批評(píng)指正。
編 者
作者具有10年以上的linux C使用經(jīng)驗(yàn),對(duì)linux系統(tǒng)有較深的理解,熟悉linux應(yīng)用程序設(shè)計(jì)和驅(qū)動(dòng)程序設(shè)計(jì)。
第1章 Linux操作系統(tǒng)概述 1
1.1 認(rèn)識(shí)Linux操作系統(tǒng) 2
1.1.1 Linux操作系統(tǒng)發(fā)展背景 2
1.1.2 Linux操作系統(tǒng)的特點(diǎn) 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初體驗(yàn) 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 自動(dòng)補(bǔ)全 19
2.3.5 用戶操作命令 20
2.3.6 關(guān)機(jī)與重啟 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的初體驗(yàn) 28
3.2 命令模式下的文本塊操作 29
3.2.1 行的定位 29
3.2.2 文本塊的復(fù)制、移動(dòng)和刪除 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 進(jìn)一步理解頭文件 42
4.2.3 頭文件重復(fù)包含 43
4.3 gdb 調(diào)試工具 44
4.3.1 gdb 調(diào)試基本命令 44
4.3.2 gdb 初體驗(yàn) 46
4.3.3 gdb 的斷點(diǎn)調(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)庫和動(dòng)態(tài)庫 57
5.1 庫的概述 58
5.1.1 為什么使用庫 58
5.1.2 庫的特點(diǎn) 58
5.2 靜態(tài)庫 59
5.2.1 靜態(tài)庫的創(chuàng)建 59
5.2.2 靜態(tài)庫的使用 60
5.3 動(dòng)態(tài)庫 61
5.3.1 動(dòng)態(tài)庫的創(chuàng)建 61
5.3.2 動(dòng)態(tài)庫的使用 62
5.4 靜態(tài)庫和動(dòng)態(tài)庫的區(qū)別 62
5.4.1 實(shí)例測(cè)試 63
5.4.2 驗(yàn)證環(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 文件的默認(rèn)規(guī)則 74
6.1.6 Makefile 文件中的偽目標(biāo) 75
6.1.7 make 的條件執(zhí)行 76
6.2 automake 的使用 76
6.2.1 automake 生成Makefile步驟 76
6.2.2 實(shí)例講解 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 下的文件鎖機(jī)制 93
7.3.2 文件鎖的使用 93
7.3.3 實(shí)例講解 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 項(xiàng)目實(shí)戰(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è)計(jì)示例 125
8.4.1 查看主機(jī)網(wǎng)卡流量 125
8.4.2 監(jiān)控CPU 和內(nèi)存的使用情況 126
8.4.3 查找日期為某一天 126
8.5 小結(jié) 127
習(xí)題 127
第9 章 進(jìn)程管理 129
9.1 進(jìn)程概述 130
9.1.1 進(jìn)程的概念 130
9.1.2 進(jìn)程ID 130
9.1.3 進(jìn)程調(diào)度 131
9.2 進(jìn)程控制 132
9.2.1 進(jìn)程控制塊 132
9.2.2 進(jìn)程創(chuàng)建函數(shù)(fork) 133
9.2.3 進(jìn)程等待函數(shù)(wait) 138
9.2.4 waitpid 函數(shù) 139
9.2.5 vfork 函數(shù) 142
9.2.6 進(jìn)程終止函數(shù)(exit) 143
9.2.7 exec 函數(shù) 145
9.3 小結(jié) 146
習(xí)題 146
第10 章 進(jìn)程間通信(IPC) 149
10.1 進(jìn)程通信概述 150
10.1.1 管道 150
10.1.2 信號(hào) 153
10.1.3 信號(hào)的產(chǎn)生方式 154
10.1.4 信號(hào)的處理方式 154
10.2 信號(hào)量 156
10.2.1 信號(hào)量定義 157
10.2.2 信號(hào)量功能 157
10.2.3 使用信號(hào)量 164
10.3 共享內(nèi)存 167
10.3.1 認(rèn)識(shí)共享內(nèi)存 167
10.3.2 共享內(nèi)存函數(shù) 168
10.4 消息隊(duì)列 173
10.4.1 消息隊(duì)列概述 174
10.4.2 消息隊(duì)列函數(shù) 176
10.4.3 消息隊(duì)列編程實(shí)例 179
10.4.4 ATM 的實(shí)現(xiàn) 183
10.5 小結(jié) 189
習(xí)題 189
第11 章 POSIX 線程 191
11.1 認(rèn)識(shí)線程 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 用信號(hào)量進(jìn)行同步 209
11.5.2 用互斥量進(jìn)行同步 211
11.6 聊天室的實(shí)現(xiàn) 214
11.7 小結(jié) 219
習(xí)題 219
第12 章 Linux 網(wǎng)絡(luò)編程 221
12.1 網(wǎng)絡(luò)編程常識(shí) 222
12.1.1 TCP/IP 協(xié)議概述 222
12.1.2 IP 地址與端口 223
12.1.3 網(wǎng)絡(luò)字節(jié)序和主機(jī)字節(jié)序 224
12.2 簡單的本地通信 225
12.2.1 socket 實(shí)現(xiàn)本地通信 226
12.2.2 相關(guān)API 詳解 226
12.3 socket 實(shí)現(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 守護(hù)進(jìn)程 237
12.4.1 守護(hù)進(jìn)程概念 237
12.4.2 守護(hù)進(jìn)程的編寫要點(diǎn) 238
12.5 多客戶通信 242
12.6 小結(jié) 245
習(xí)題 246
第13 章 Linux 驅(qū)動(dòng)程序和嵌入式基礎(chǔ) 249
13.1 Linux 驅(qū)動(dòng)程序與嵌入式開發(fā)的基礎(chǔ)知識(shí) 250
13.1.1 嵌入式Linux 的特點(diǎn) 250
13.1.2 嵌入式Linux 的系統(tǒng)開發(fā)平臺(tái) 251
13.1.3 嵌入式Linux 開發(fā)的一般流程 251
13.1.4 嵌入式Linux 驅(qū)動(dòng)程序 252
13.2 Linux 驅(qū)動(dòng)程序與嵌入式開發(fā)中的注意問題 253
13.2.1 Linux 的內(nèi)存空間劃分 253
13.2.2 Linux 的內(nèi)存管理和IO尋址 253
13.2.3 Linux 的時(shí)基問題 254
13.3 Linux 驅(qū)動(dòng)程序和嵌入式開發(fā)的設(shè)備類型 254
13.3.1 字符設(shè)備特點(diǎn) 255
13.3.2 塊設(shè)備特點(diǎn) 255
13.4 Linux 嵌入式開發(fā)的應(yīng)用特點(diǎn) 255
13.4.1 常用的調(diào)試方法 255
13.4.2 可移植性問題 256
13.5 小結(jié) 256
習(xí)題 257
附錄 習(xí)題答案 259