圖文結(jié)合視頻,全面精講Linux編程關(guān)鍵知識(shí)點(diǎn);只要你看,就能懂能會(huì)能用。
本書(shū)從零開(kāi)始,循序漸進(jìn)地攻破Linux環(huán)境編程所遇到的各級(jí)關(guān)卡,以圖文并茂的形式幫助讀者理解各個(gè)概念。本書(shū)內(nèi)容翔實(shí),囊括了Linux系統(tǒng)操作細(xì)節(jié),Shell腳本編程精要,各種編程環(huán)境所需要解決的技術(shù)難點(diǎn),以及在Linux環(huán)境下的C語(yǔ)言編程技術(shù)、并發(fā)編程技術(shù)和音/視頻編程等核心內(nèi)容。全書(shū)用近400幅圖表幫助讀者理解復(fù)雜概念,因此讀者不需要具備任何計(jì)算機(jī)編程經(jīng)驗(yàn),在本書(shū)的指導(dǎo)下就能進(jìn)入編程的世界,并能在閱讀和實(shí)踐中享受編程的樂(lè)趣。同時(shí),本書(shū)配套完整的視頻教程,給讀者以*直觀、*容易吸收知識(shí)的方式,融會(huì)貫通書(shū)中所有的知識(shí)點(diǎn)。不僅如此,讀者還能夠得到作者及其團(tuán)隊(duì)的在線技術(shù)支援和答疑。
林世霖,國(guó)內(nèi)C編程專(zhuān)家,粵嵌*受歡迎培訓(xùn)師和演講家,金牌講師,資深嵌入式Linux研發(fā)工程師。目前主要致力于Linux應(yīng)用軟件及系統(tǒng)開(kāi)發(fā)和研究,十余年嵌入式系統(tǒng)軟件開(kāi)發(fā)經(jīng)驗(yàn)。而且精通數(shù)據(jù)結(jié)構(gòu)算法與實(shí)現(xiàn),以及SCO系統(tǒng)下shell編程與系統(tǒng)編程,有豐富的銀行交易系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。同時(shí)具有嫻熟的授課技巧和成體系化的教學(xué)經(jīng)驗(yàn),上課風(fēng)格多樣化,善于并樂(lè)于傳播IT技術(shù),熱衷于教育行業(yè),常常與學(xué)生打成一片。
目 錄
第1章 Linux編程環(huán)境 1
1.1 基本工具 1
1.1.1 免費(fèi)大餐:Ubuntu 1
1.1.2 桌面系統(tǒng):gnome 6
1.1.3 網(wǎng)絡(luò)配置:純手工打造 6
1.1.4 軟件集散地:APT 8
1.1.5 無(wú)敵板斧:vi 10
1.1.6 開(kāi)發(fā)圣典:man 13
1.1.7 配置共享目錄 15
1.2 Shell命令 17
1.2.1 概念掃盲 17
1.2.2 命令詳解 19
1.2.3 上古神器 38
1.3 Shell腳本編程 45
1.3.1 開(kāi)場(chǎng)白 45
1.3.2 腳本格式 45
1.3.3 變量 46
1.3.4 特殊符號(hào)們 48
1.3.5 字符串處理 50
1.3.6 測(cè)試語(yǔ)句 51
1.3.7 腳本語(yǔ)法單元 52
1.4 編譯器:GCC 55
1.4.1 簡(jiǎn)述 55
1.4.2 編譯過(guò)程簡(jiǎn)介 55
1.4.3 實(shí)用的編譯選項(xiàng) 58
1.5 解剖Makefile 59
1.5.1 工程管理器make 59
1.5.2 概覽性示例 60
1.5.3 書(shū)寫(xiě)格式 60
1.5.4 變量詳解 62
1.5.5 各種規(guī)則 71
1.5.6 條件判斷 75
1.5.7 函數(shù) 77
1.5.8 實(shí)用make選項(xiàng)集錦 85
1.6 GNU-autotools 86
1.6.1 autotools簡(jiǎn)介 86
1.6.2 文件組織 87
1.6.3 configure.a(chǎn)c編寫(xiě)規(guī)則 88
第2章 深度Linux-C 92
2.1 基本要素 92
2.1.1 Linux下C代碼規(guī)范 93
2.1.2 基本數(shù)據(jù)類(lèi)型 97
2.1.3 運(yùn)算符 108
2.1.4 控制流 116
2.2 函數(shù) 124
2.2.1 函數(shù)初體驗(yàn) 125
2.2.2 函數(shù)調(diào)用內(nèi)幕 128
2.2.3 遞歸思維及其實(shí)現(xiàn) 130
2.2.4 變參函數(shù) 133
2.2.5 回調(diào)函數(shù) 137
2.2.6 內(nèi)聯(lián)函數(shù) 140
2.3 數(shù)組與指針 142
2.3.1 數(shù)組初階 142
2.3.2 內(nèi)存地址 144
2.3.3 指針初階 145
2.3.4 復(fù)雜指針定義 147
2.3.5 指針運(yùn)算 151
2.3.6 數(shù)組與指針 152
2.3.7 復(fù)雜數(shù)組剖析 155
2.3.8 const指針 158
2.3.9 char指針和char數(shù)組 160
2.4 內(nèi)存管理 162
2.4.1 進(jìn)程內(nèi)存布局 162
2.4.2 堆(Heap) 164
2.5 組合數(shù)據(jù)類(lèi)型 167
2.5.1 結(jié)構(gòu)體 167
2.5.2 共用體 171
2.5.3 枚舉 172
2.6 高級(jí)議題 173
2.6.1 工程代碼組織 173
2.6.2 頭文件 175
2.6.3 宏(macro) 176
2.6.4 條件編譯 182
2.6.5 復(fù)雜聲明 184
2.6.6 attribute機(jī)制 185
第3章 Linux的數(shù)據(jù)組織 188
3.1 無(wú)所不在的鏈表 188
3.1.1 開(kāi)場(chǎng)白 188
3.1.2 單向鏈表 190
3.1.3 單向循環(huán)鏈表 198
3.1.4 雙向循環(huán)鏈表 200
3.1.5 Linux內(nèi)核鏈表 210
3.2 線性表變異體 227
3.2.1 堆疊的盤(pán)子:棧 227
3.2.2 文明的社會(huì):隊(duì)列 236
3.3 小白慎入:非線性結(jié)構(gòu) 243
3.3.1 基本概念 243
3.3.2 玩轉(zhuǎn)BST 247
3.3.3 各種的遍歷算法 260
3.3.4 自平衡AVL樹(shù) 263
3.3.5 自平衡Linux紅黑樹(shù) 273
第4章 I/O編程技術(shù) 289
4.1 一切皆文件 289
4.1.1 文件的概念 289
4.1.2 各類(lèi)文件 290
4.2 文件操作 290
4.2.1 系統(tǒng)I/O 291
4.2.2 標(biāo)準(zhǔn)I/O 306
4.2.3 文件屬性 320
4.3 目錄檢索 327
4.3.1 基本概念 327
4.3.2 相關(guān)API 328
4.4 觸控屏應(yīng)用接口 330
4.4.1 輸入子系統(tǒng)簡(jiǎn)介 330
4.4.2 TSLIB庫(kù)詳解 333
4.4.3 劃屏算法 338
第5章 Linux進(jìn)程線程 345
5.1 Linux進(jìn)程入門(mén) 345
5.1.1 進(jìn)程概念 345
5.1.2 進(jìn)程組織方式 346
5.2 進(jìn)程的“生老病死” 348
5.2.1 進(jìn)程狀態(tài) 348
5.2.2 相關(guān)重要API 350
5.3 進(jìn)程的語(yǔ)言 358
5.3.1 管道 358
5.3.2 信號(hào) 363
5.3.3 system-V IPC簡(jiǎn)介 380
5.3.4 消息隊(duì)列(MSG) 381
5.3.5 共享內(nèi)存(SHM) 387
5.3.6 信號(hào)量(SEM) 392
5.4 Linux線程入門(mén) 400
5.4.1 線程基本概念 400
5.4.2 線程API及特點(diǎn) 401
5.5 線程安全 410
5.5.1 POSIX信號(hào)量 410
5.5.2 互斥鎖與讀寫(xiě)鎖 415
5.5.3 條件變量 418
5.5.4 可重入函數(shù) 421
5.6 線程池 422
5.6.1 實(shí)現(xiàn)原理 422
5.6.2 接口設(shè)計(jì) 423
5.6.3 實(shí)現(xiàn)源碼 425
第6章 Linux音頻、視頻編程 433
6.1 基本背景 433
6.2 Linux音頻 433
6.2.1 音頻概念 433
6.2.2 標(biāo)準(zhǔn)音頻接口ALSA 436
6.3 Linux視頻輸出 450
6.3.1 基本概念 450
6.3.2 framebuffer 452
6.3.3 在LCD上畫(huà)圖 462
6.3.4 效果算法 469
6.4 Linux視頻輸入 478
6.4.1 V4L2簡(jiǎn)介 478
6.4.2 V4L2視頻采集流程 478
6.4.3 V4L2核心命令字和結(jié)構(gòu)體 481
6.4.4 編碼格式和媒體流 484
6.5 多媒體開(kāi)發(fā)庫(kù)SDL 489
6.5.1 SDL簡(jiǎn)介 489
6.5.2 編譯和移植 489
6.5.3 視頻子系統(tǒng) 490
6.5.4 音頻子系統(tǒng) 494
6.5.5 事件子系統(tǒng) 498
6.5.6 處理YUV視頻源 502
6.6 音/視頻編解碼庫(kù)FFmpeg 504
6.6.1 FFmpeg簡(jiǎn)介 504
6.6.2 核心結(jié)構(gòu)體與常用API 505
6.6.3 與SDL結(jié)合實(shí)現(xiàn)簡(jiǎn)單的播放器 511