本書基于Linux內核,以RedHat Linux平臺為例,介紹Linux系統程序設計的基礎知識,為準備學習Linux系統程序開發的初學者提供方便快捷的途徑。 全書共12章。第1章介紹Linux操作系統的基本使用方法;第2章介紹Linux平臺下進行C語言開發需要的各種工具;第3章介紹Linux平臺下常用的編程基礎知識;第4~6章介紹文件、文件屬性、目錄文件相關的編程理論和方法;第7、8章介紹進程和線程的編程方法;第9~11章介紹信號、管道、信號量、共享內存、消息隊列、套接字6種進程間通信方式;第12章介紹兩個貫穿本書大多數知識點的綜合案例。 本書可作為高等院校計算機科學與技術、軟件工程、物聯網工程等相關專業“Linux程序設計”相關課程的教材,同時可供本科高年級學生自學使用,也可以作為相關工程技術人員和計算機愛好者的參考書。
王凱,大連東軟信息學院 計算機科學與技術系副教授,多年來一直從事嵌入式軟件開發,移動應用開發等方面的教學與科研工作。
第1章 Linux基礎
1.1 UNIX/Linux簡介
1.1.1 UNIX簡介
1.1.2 UNIX體系結構
1.1.3 Linux簡介
1.1.4 Linux版本說明
1.1.5 Linux特點
1.2 庫函數與系統調用
1.3 Linux常用命令
1.3.1 用戶和用戶組命令
1.3.2 文件和目錄命令
1.3.3 進程命令
1.3.4 獲取幫助信息
1.4 案例1:通過SSH終端登錄Linux 系統
1.4.1 分析與設計
1.4.2 實施
1.4.3 運行
習題
第2章 Linux系統開發環境
2.1 Vi編輯器
2.1.1 Vi編輯器的工作模式
2.1.2 Vi編輯器的基本用法
2.1.3 Vi編輯器的高級用法
2.2 GCC編譯器
2.2.1 GCC編譯器介紹
2.2.2 GCC編譯器基本用法
2.3 Makefile文件的使用
2.3.1 Makefile文件
2.3.2 Makefile文件的命名
2.3.3 Makefile文件的調用
2.3.4 Makefile文件的內容
2.3.5 make命令的特殊用法
2.4 GDB調試器
2.4.1 輸出調試
2.4.2 GDB調試器
2.5 庫
2.5.1 庫相關概念
2.5.2 靜態庫和共享庫
2.6 案例2:簡易學生成績計算
2.6.1 分析與設計
2.6.2 實施
2.6.3 編譯與運行
習題
第3章 Linux程序設計初步
3.1 程序及進程的存儲結構
3.2 變量的類型修飾符
3.3 命令行參數及獲取
3.3.1 命令行參數
3.3.2 getopt獲取命令行參數
3.4 環境變量
3.4.1 Shell變量
3.4.2 環境變量的相關命令
3.4.3 環境變量函數
3.5 時間管理
3.6 錯誤代碼
3.7 標準I/O與文件I/O
3.8 案例3:設置環境變量
3.8.1 分析與設計
3.8.2 實施
3.8.3 編譯與運行
習題
第4章 文件I/O
4.1 文件系統簡介
4.1.1 UNIX/Linux文件系統概述
4.1.2 虛擬文件系統(VFS)
4.1.3 索引節點(inode)
4.1.4 文件的類型
4.1.5 文件的訪問權限
4.2 訪問文件的內核數據結構
4.3 文件基本I/O操作
4.3.1 打開/創建文件
4.3.2 讀文件
4.3.3 寫文件
4.3.4 文件定位
4.3.5 關閉文件
4.3.6 文件操作舉例
4.4 文件訪問的同步
4.5 案例4:文件復制命令的實現
4.5.1 分析與設計
4.5.2 實施
4.5.3 編譯與運行
習題
第5章 文件屬性
5.1 獲取文件屬性
5.2 用戶/組ID與名字的轉換
5.2.1 用戶和組
5.2.2 獲取文件的用戶和組的信息
5.3 硬鏈接與符號鏈接
5.3.1 硬鏈接與符號鏈接的區別
5.3.2 相關的系統調用
5.4 dup/dup2
5.4.1 輸入/輸出重定向
5.4.2 系統調用dup/dup2
5.5 文件屬性的修改
5.5.1 修改文件屬性
5.5.2 改變文件所有者及所屬組chown/fchown/lchown
5.5.3 改變文件訪問權限chmod/fchmod
5.5.4 改變文件時間utime
5.5.5 改變文件長度truncate/ftruncate
5.6 案例5:顯示文件長格式信息
5.6.1 分析與設計
5.6.2 實施
5.6.3 編譯與運行
習題
第6章 目錄文件管理
6.1 目錄基本操作
6.1.1 打開目錄
6.1.2 讀目錄
6.1.3 關閉目錄
6.2 目錄其他操作
6.2.1 切換當前目錄
6.2.2 創建目錄
6.2.3 刪除目錄
6.2.4 目錄指針定位
6.3 案例6:顯示指定目錄下文件列表
6.3.1 分析與設計
6.3.2 實施
6.3.3 編譯與運行
習題
第7章 進程控制
7.1 進程基本概念
7.1.1 進程和進程控制塊
7.1.2 進程標識
7.1.3 用戶標識
7.2 進程控制
7.2.1 創建進程
7.2.2 exec*系列函數
7.2.3 進程終止
7.2.4 等待進程結束
7.2.5 system函數
7.3 什么是Shell
7.3.1 用戶登錄Shell
7.3.2 Shell執行命令
7.4 案例7:實現簡單的Shell
7.4.1 分析與設計
7.4.2 實施
7.4.3 編譯與運行
習題
第8章 線程
8.1 線程概念
8.2 線程基本操作
8.3 線程間通信
8.4 案例8:線程實例
8.4.1 分析與設計
8.4.2 實施
8.4.3 編譯與運行
習題
第9章 信號與管道
9.1 信號
9.1.1 信號的概念
9.1.2 信號的產生
9.1.3 信號的響應方式
9.1.4 sleep函數和pause系統調用
9.1.5 信號集
9.2 管道
9.2.1 管道基本概念
9.2.2 FIFO
習題
第10章 進程間通信
10.1 System V IPC簡介
10.2 System V信號量
10.3 System V共享內存
10.4 System V消息隊列
習題
第11章 網絡編程
11.1 網絡編程基本概念
11.1.1 常用網絡相關命令和配置文件
11.1.2 軟件體系結構
11.1.3 網絡協議及OSI參考模型
11.1.4 IP地址和端口
11.1.5 字節順序
11.1.6 網絡數據傳輸方式
11.2 套接字編程基礎
11.2.1 套接字簡介
11.2.2 套接字地址結構
11.2.3 面向連接套接字通信過程
11.2.4 面向無連接套接字通信過程
11.3 套接字編程相關系統調用
11.3.1 系統調用socket
11.3.2 系統調用bind
11.3.3 系統調用listen
11.3.4 系統調用accept
11.3.5 系統調用connect
11.3.6 系統調用send
11.3.7 系統調用sendto
11.3.8 系統調用recv
11.3.9 系統調用recvfrom
11.3.10 系統調用close
11.3.11 系統調用shutdown
11.4 案例9:基于網絡的進程間通信
11.4.1 分析與設計
11.4.2 實施
11.4.3 編譯與運行
11.5 基于UDP的網絡編程
11.6 域名解析
11.6.1 域名解析
11.6.2 IP地址形式轉換
11.6.3 IP地址與主機名
習題
第12章 綜合案例
12.1 Linux網絡傳輸系統
12.1.1 構思
12.1.2 設計
12.1.3 實施
12.1.4 運行
12.2 簡易的文件傳輸系統
12.2.1 構思
12.2.2 設計
12.2.3 實施
12.2.4 運行
習題
附錄A Linux主要的系統調用
附錄B ASCII碼
參考文獻