內容簡介
《Linux C編程完全解密》以Red Hat 9.0 和Ubuntu 12.01 為平臺,系統地介紹了Linux 操作系統下的各種shell 命令以及在此平臺下進行C 語言開發的步驟和方法,并通過大量實例講解在Linux 下進行C 語言開發的方法和技巧。
《Linux C編程完全解密》共13 章,包括Linux 操作系統概述,Linux 的基本操作,文本編輯器,Linux 下的C 語言開發基礎,靜態庫和動態庫,make 工程管理,文件編程,shell 腳本的開發,進程管理,進程間通信(IPC), POSIX 線程,Linux 網絡編程,Linux 驅動程序和嵌入式基礎。同時還配有綜合項目實戰環節的源代碼, 使讀者能夠在此基礎上舉一反三,提升開發應用項目的能力。
《Linux C編程完全解密》結構合理、內容全面、深入淺出、通俗易懂,具有很強的參考性和實用性。可作為普通高等院校計算機及相關專業進行Linux 平臺下C 語言程序設計的教材,也可作為程序開發員的參考用書。
前言
Linux 系統基于開源軟件思想,是當下最流行的操作系統之一。隨著Linux 系統的發展和廣泛應用,其已占據絕大多數嵌入式系統和PC 服務器的市場份額,且桌面系統的普及率也在逐年上升。越來越多的開發者希望了解Linux 系統開發技術,特別是基于Linux 系統上流行的C 語言開發技術。本書全面介紹了Linux 系統上C 語言開發技術,大量實例貫穿全書,由淺入深,力求使讀者在學習后,能夠掌握Linux 平臺下的開發技能,并通過大量的項目實戰,培養綜合實踐能力。本書特點1. 提供Ubuntu 免安裝文件和Red Hat 安裝鏡像為了讓讀者更好地按照本書的內容進行學習,做到無障礙學習測試,作者提供了開發工具和環境,包括兩個Linux 發行版本和VMware 10 的安裝文件。2. 配有大量實例源代碼為了讓讀者更加快速、直觀地學習本書內容,在每個章節都安排了實例講解。另外,一些重要章節的課后上機習題也附有源代碼供讀者參考。3. 循序漸進,由淺入深工欲善其事,必先利其器。為了方便讀者學習,本書首先介紹了Linux 操作系統平臺下終端命令的使用方法和技巧。在此基礎上,學習如何在Linux 系統下進行C 語言的開發。通過基礎實例講解和項目實戰逐步培養學習能力,能夠舉一反三,具備一定的應用開發能力。4. 項目實戰案例本書安排了兩個項目實戰,分別是模擬ATM 功能和局域網內的聊天程序。項目實戰旨在培養綜合運用知識的能力,能夠對所學知識進行有效整合,提高項目開發的能力和水平。本書內容第1章:介紹Linux操作系統的發展背景和特點。Linux系統是一個開放的操作系統,在學習的同時,可根據自身需要安裝Linux操作系統,為實踐各種開發技能打好基礎。第2章:介紹了Linux系統的基本操作,包括shell命令的基本使用、目錄及文件的相關操作命令、軟件包的安裝等內容。第3章:介紹了Linux平臺下的vi文本編輯器,通過本章的學習,會使用該編輯器編寫C源文件。第4章:介紹了Linux系統下C語言開發步驟,包括編譯C語言的編譯器gcc基本概念及編譯過程和IDE集成開發環境的安裝和使用。第5章:介紹了動態庫和靜態庫的應用,包括庫的概述,靜態庫和動態庫的創建步驟以及通過實例講解靜態庫和動態庫的區別。第6章:介紹了make工程管理,包括make工程管理的作用,如何為項目編寫規則文件,automake的使用方法以及相關的實例講解。第7章:介紹了文件編程,包括基本的I/O函數的使用方法和技巧,文件鎖的概念和使用,以及ATM項目實戰。第8章:介紹了shell腳本的開發,包括shell編程基礎和shell腳本的語法,為了更好地掌握本章內容,特別布置了shell腳本設計示例。第9章:介紹了Linux系統下的進程管理,包括進程的概念,進程控制等。其中進程控制中主要介紹了進程創建函數fork、進程等待函數wait及waitpid函數的用法。第10章:介紹了進程間的通信機制,包括管道、信號、信號量、共享內存、消息隊列等通信機制的特點和應用,并進行了實例講解。第11章:介紹了POSIX線程,包括線程創建,線程等待,線程銷毀和線程同步。本章最后通過項目實戰——聊天室的設計與實現,對本章內容進行了練習。第12章:介紹了Linux下的網絡編程的方法和步驟,包括網絡編程的基礎知識,socket實現本地通信和網絡通信的編程思路和步驟,最后通過多客戶通信的實例將本章內容與第9章內容結合運用,以提高綜合運用能力。第13章:介紹了Linux在嵌入式方向的應用,包括Linux驅動程序和嵌入式開發基礎,嵌入式Linux開發的一般流程及開發中需要注意的問題,最后總結了Linux嵌入式開發的應用特點。本書由唐山師范學院的閆敬、吳淑坤老師編寫完成。書中實例代碼經過嚴格測試可以直接運行。同時對參與本書代碼錄入、語法校正等工作的同事們表示由衷的感謝!由于作者水平有限,時間倉促,書中難免有錯誤和不妥之處,敬請讀者批評指正。編 者目錄
第1章 Linux操作系統概述 11.1 認識Linux操作系統 21.1.1 Linux操作系統發展背景 21.1.2 Linux操作系統的特點 21.1.3 Linux操作系統的應用現狀 31.2 Linux C開發概述 31.2.1 Linux C開發簡介 31.2.2 IEEE POSIX 41.2.3 Linux C 開發工具 41.3 小結 4習題 4第2章 Linux的基本操作 72.1 shell初體驗 82.1.1 虛擬終端 82.1.2 shell命令 82.2 shell常用命令 92.2.1 目錄和文件操作命令 92.2.2 文件歸檔及壓縮 152.2.3 軟件包的安裝 172.3 深入shell 182.3.1 通配符 182.3.2 重定向 182.3.3 管道 192.3.4 自動補全 192.3.5 用戶操作命令 202.3.6 關機與重啟 212.4 硬鏈接與軟鏈接 222.4.1 硬鏈接 232.4.2 軟鏈接 242.5 小結 24習題 25第3章 文本編輯器 273.1 vi編輯器概述 283.1.1 vi的三種工作模式 283.1.2 vi的初體驗 283.2 命令模式下的文本塊操作 293.2.1 行的定位 293.2.2 文本塊的復制、移動和刪除 303.2.3 撤銷和重復 313.2.4 字符串的查找 313.3 末行模式下的常用操作 313.4 vi環境定制 323.5 小結 33習題 33第4章 Linux下的C語言開發基礎 354.1 C語言開發的基本步驟 364.1.1 gcc編譯工具 364.1.2 gcc 編譯過程詳解 374.1.3 gcc 編譯多文件 394.2 頭文件 404.2.1 頭文件的編輯和使用 404.2.2 進一步理解頭文件 424.2.3 頭文件重復包含 434.3 gdb 調試工具 444.3.1 gdb 調試基本命令 444.3.2 gdb 初體驗 464.3.3 gdb 的斷點調試 484.4 IDE 工具 CodeBlocks 514.4.1 CodeBlocks 的安裝 514.4.2 CodeBlocks 的使用 524.5 小結 55習題 55第5 章 靜態庫和動態庫 575.1 庫的概述 585.1.1 為什么使用庫 585.1.2 庫的特點 585.2 靜態庫 595.2.1 靜態庫的創建 595.2.2 靜態庫的使用 605.3 動態庫 615.3.1 動態庫的創建 615.3.2 動態庫的使用 625.4 靜態庫和動態庫的區別 625.4.1 實例測試 635.4.2 驗證環節 635.5 綜合舉例 655.6 小結 66習題 66第6 章 make 工程管理 696.1 make 概述 706.1.1 make 命令和Makefile 文件 706.1.2 Makefile 文件編寫 706.1.3 Makefile 文件中的變量 726.1.4 Makefile 通配符 736.1.5 Makefile 文件的默認規則 746.1.6 Makefile 文件中的偽目標 756.1.7 make 的條件執行 766.2 automake 的使用 766.2.1 automake 生成Makefile步驟 766.2.2 實例講解 776.3 小結 80習題 80第7 章 Linux 下的文件編程 817.1 概述 827.1.1 Linux 下的系統調用 827.1.2 基本I/O 函數 827.1.3 文件描述符 837.2 基本I/O 操作 837.2.1 open 函數 847.2.2 close 函數 867.2.3 write 函數 877.2.4 read 函數 887.2.5 lseek 函數 907.3 文件鎖 917.3.1 Linux 下的文件鎖機制 937.3.2 文件鎖的使用 937.3.3 實例講解 947.4 目錄操作 977.4.1 mkdir 函數 977.4.2 rmdir 函數 987.4.3 getcwd 函數 997.4.4 opendir 函數 997.4.5 readdir 函數 1007.4.6 closedir 函數 1017.5 項目實戰 1017.6 小結 110習題 110第8 章 shell 腳本的開發 1138.1 shell 編程基礎 1148.2 管道和重定向 1148.2.1 輸出重定向 1148.2.2 輸入重定向 1158.2.3 管道 1158.3 shell 腳本的語法 1168.3.1 變量 1178.3.2 程序結構 1188.3.3 函數 1238.3.4 命令及其執行 1238.3.5 調試腳本 1258.4 shell 腳本設計示例 1258.4.1 查看主機網卡流量 1258.4.2 監控CPU 和內存的使用情況 1268.4.3 查找日期為某一天 1268.5 小結 127習題 127第9 章 進程管理 1299.1 進程概述 1309.1.1 進程的概念 1309.1.2 進程ID 1309.1.3 進程調度 1319.2 進程控制 1329.2.1 進程控制塊 1329.2.2 進程創建函數(fork) 1339.2.3 進程等待函數(wait) 1389.2.4 waitpid 函數 1399.2.5 vfork 函數 1429.2.6 進程終止函數(exit) 1439.2.7 exec 函數 1459.3 小結 146習題 146第10 章 進程間通信(IPC) 14910.1 進程通信概述 15010.1.1 管道 15010.1.2 信號 15310.1.3 信號的產生方式 15410.1.4 信號的處理方式 15410.2 信號量 15610.2.1 信號量定義 15710.2.2 信號量功能 15710.2.3 使用信號量 16410.3 共享內存 16710.3.1 認識共享內存 16710.3.2 共享內存函數 16810.4 消息隊列 17310.4.1 消息隊列概述 17410.4.2 消息隊列函數 17610.4.3 消息隊列編程實例 17910.4.4 ATM 的實現 18310.5 小結 189習題 189第11 章 POSIX 線程 19111.1 認識線程 19211.2 多線程編程 19411.2.1 線程創建函數 19511.2.2 多線程中的線程等待 19811.2.3 線程專有數據 19911.2.4 保證多線程編程中函數的可重入性 20211.3 線程的屬性 20311.3.1 常用線程屬性 20311.3.2 常用線程屬性函數 20511.4 線程的銷毀 20611.5 線程的同步 20911.5.1 用信號量進行同步 20911.5.2 用互斥量進行同步 21111.6 聊天室的實現 21411.7 小結 219習題 219第12 章 Linux 網絡編程 22112.1 網絡編程常識 22212.1.1 TCP/IP 協議概述 22212.1.2 IP 地址與端口 22312.1.3 網絡字節序和主機字節序 22412.2 簡單的本地通信 22512.2.1 socket 實現本地通信 22612.2.2 相關API 詳解 22612.3 socket 實現網絡通信 23012.3.1 基于TCP 的網絡編程 23012.3.2 相關API 詳解 23012.3.3 基于UDP 的網絡編程 23412.4 守護進程 23712.4.1 守護進程概念 23712.4.2 守護進程的編寫要點 23812.5 多客戶通信 24212.6 小結 245習題 246第13 章 Linux 驅動程序和嵌入式基礎 24913.1 Linux 驅動程序與嵌入式開發的基礎知識 25013.1.1 嵌入式Linux 的特點 25013.1.2 嵌入式Linux 的系統開發平臺 25113.1.3 嵌入式Linux 開發的一般流程 25113.1.4 嵌入式Linux 驅動程序 25213.2 Linux 驅動程序與嵌入式開發中的注意問題 25313.2.1 Linux 的內存空間劃分 25313.2.2 Linux 的內存管理和IO尋址 25313.2.3 Linux 的時基問題 25413.3 Linux 驅動程序和嵌入式開發的設備類型 25413.3.1 字符設備特點 25513.3.2 塊設備特點 25513.4 Linux 嵌入式開發的應用特點 25513.4.1 常用的調試方法 25513.4.2 可移植性問題 25613.5 小結 256習題 257附錄 習題答案 259