C語言

原文鏈接:https://akaedu.github.io/book/intro.program.html

歷史

前言

I. C語言入門

1. 程序的基本概念

1. 程序和編程語言

2. 自然語言和形式語言

3. 程序的調試

4. 第一個程序

2. 常量、變量和表達式

1. 繼續Hello World

2. 常量

3. 變量

4. 賦值

5. 表達式

6. 字符類型與字符編碼

3. 簡單函數

1. 數學函數

2. 自定義函數

3. 形參和實參

4. 全局變量、局部變量和作用域

4. 分支語句

1. if語句

2. if/else語句

3. 布爾代數

4. switch語句

5. 深入理解函數

1. return語句

2. 增量式開發

3. 遞歸

6. 循環語句

1. while語句

2. do/while語句

3. for語句

4. break和continue語句

5. 嵌套循環

6. goto語句和標號

7. 結構體

1. 複合類型與結構體

2. 數據抽象

3. 數據類型標誌

4. 嵌套結構體

8. 數組

1. 數組的基本概念

2. 數組應用實例:統計隨機數

3. 數組應用實例:直方圖

4. 字符串

5. 多維數組

9. 編碼風格

1. 縮進和空白

2. 註釋

3. 標識符命名

4. 函數

5. indent工具

10. gdb

1. 單步執行和跟蹤函數調用

2. 斷點

3. 觀察點

4. 段錯誤

11. 排序與查找

1. 算法的概念

2. 插入排序

3. 算法的時間複雜度分析

4. 歸併排序

5. 線性查找

6. 折半查找

12. 棧與隊列

1. 數據結構的概念

2. 堆棧

3. 深度優先搜索

4. 隊列與廣度優先搜索

5. 環形隊列

13. 本階段總結

II. C語言本質

14. 計算機中數的表示

1. 爲什麼計算機用二進制計數

2. 不同進制之間的換算

3. 整數的加減運算

3.1. Sign and Magnitude表示法

3.2. 1's Complement表示法

3.3. 2's Complement表示法

3.4. 有符號數和無符號數

4. 浮點數

15. 數據類型詳解

1. 整型

2. 浮點型

3. 類型轉換

3.1. Integer Promotion

3.2. Usual Arithmetic Conversion

3.3. 由賦值產生的類型轉換

3.4. 強制類型轉換

3.5. 編譯器如何處理類型轉換

16. 運算符詳解

1. 位運算

1.1. 按位與、或、異或、取反運算

1.2. 移位運算

1.3. 掩碼

1.4. 異或運算的一些特性

2. 其它運算符

2.1. 複合賦值運算符

2.2. 條件運算符

2.3. 逗號運算符

2.4. sizeof運算符與typedef類型聲明

3. Side Effect與Sequence Point

4. 運算符總結

17. 計算機體系結構基礎

1. 內存與地址

2. CPU

3. 設備

4. MMU

5. Memory Hierarchy

18. x86彙編程序基礎

1. 最簡單的彙編程序

2. x86的寄存器

3. 第二個彙編程序

4. 尋址方式

5. ELF文件

5.1. 目標文件

5.2. 可執行文件

19. 彙編與C之間的關係

1. 函數調用

2. main函數和啓動例程

3. 變量的存儲佈局

4. 結構體和聯合體

5. C內聯彙編

6. volatile限定符

20. 鏈接詳解

1. 多目標文件的鏈接

2. 定義和聲明

2.1. externstatic關鍵字

2.2. 頭文件

2.3. 定義和聲明的詳細規則

3. 靜態庫

4. 共享庫

4.1. 編譯、鏈接、運行

4.2. 動態鏈接的過程

4.3. 共享庫的命名慣例

5. 虛擬內存管理

21. 預處理

1. 預處理的步驟

2. 宏定義

2.1. 函數式宏定義

2.2. 內聯函數

2.3. ###運算符和可變參數

2.4. 宏展開的步驟

3. 條件預處理指示

4. 其它預處理特性

22. Makefile基礎

1. 基本規則

2. 隱含規則和模式規則

3. 變量

4. 自動處理頭文件的依賴關係

5. 常用的make命令行選項

23. 指針

1. 指針的基本概念

2. 指針類型的參數和返回值

3. 指針與數組

4. 指針與const限定符

5. 指針與結構體

6. 指向指針的指針與指針數組

7. 指向數組的指針與多維數組

8. 函數類型和函數指針類型

9. 不完全類型和複雜聲明

24. 函數接口

1. 本章的預備知識

1.1. strcpystrncpy

1.2. mallocfree

2. 傳入參數與傳出參數

3. 兩層指針的參數

4. 返回值是指針的情況

5. 回調函數

6. 可變參數

25. C標準庫

1. 字符串操作函數

1.1. 初始化字符串

1.2. 取字符串的長度

1.3. 拷貝字符串

1.4. 連接字符串

1.5. 比較字符串

1.6. 搜索字符串

1.7. 分割字符串

2. 標準I/O庫函數

2.1. 文件的基本概念

2.2. fopen/fclose

2.3. stdin/stdout/stderr

2.4. errno與perror函數

2.5. 以字節爲單位的I/O函數

2.6. 操作讀寫位置的函數

2.7. 以字符串爲單位的I/O函數

2.8. 以記錄爲單位的I/O函數

2.9. 格式化I/O函數

2.10. C標準庫的I/O緩衝區

2.11. 本節綜合練習

3. 數值字符串轉換函數

4. 分配內存的函數

26. 鏈表、二叉樹和哈希表

1. 鏈表

1.1. 單鏈表

1.2. 雙向鏈表

1.3. 靜態鏈表

1.4. 本節綜合練習

2. 二叉樹

2.1. 二叉樹的基本概念

2.2. 排序二叉樹

3. 哈希表

27. 本階段總結

III. Linux系統編程

28. 文件與I/O

1. 彙編程序的Hello world

2. C標準I/O庫函數與Unbuffered I/O函數

3. open/close

4. read/write

5. lseek

6. fcntl

7. ioctl

8. mmap

29. 文件系統

1. 引言

2. ext2文件系統

2.1. 總體存儲佈局

2.2. 實例剖析

2.3. 數據塊尋址

2.4. 文件和目錄操作的系統函數

3. VFS

3.1. 內核數據結構

3.2. dup和dup2函數

30. 進程

1. 引言

2. 環境變量

3. 進程控制

3.1. fork函數

3.2. exec函數

3.3. wait和waitpid函數

4. 進程間通信

4.1. 管道

4.2. 其它IPC機制

5. 練習:實現簡單的Shell

31. Shell腳本

1. Shell的歷史

2. Shell如何執行命令

2.1. 執行交互式命令

2.2. 執行腳本

3. Shell的基本語法

3.1. 變量

3.2. 文件名代換(Globbing):* ? []

3.3. 命令代換:`或 $()

3.4. 算術代換:$(())

3.5. 轉義字符\

3.6. 單引號

3.7. 雙引號

4. bash啓動腳本

4.1. 作爲交互登錄Shell啓動,或者使用--login參數啓動

4.2. 以交互非登錄Shell啓動

4.3. 非交互啓動

4.4. 以sh命令啓動

5. Shell腳本語法

5.1. 條件測試:test [

5.2. if/then/elif/else/fi

5.3. case/esac

5.4. for/do/done

5.5. while/do/done

5.6. 位置參數和特殊變量

5.7. 函數

6. Shell腳本的調試方法

32. 正則表達式

1. 引言

2. 基本語法

3. sed

4. awk

5. 練習:在C語言中使用正則表達式

33. 信號

1. 信號的基本概念

2. 產生信號

2.1. 通過終端按鍵產生信號

2.2. 調用系統函數向進程發信號

2.3. 由軟件條件產生信號

3. 阻塞信號

3.1. 信號在內核中的表示

3.2. 信號集操作函數

3.3. sigprocmask

3.4. sigpending

4. 捕捉信號

4.1. 內核如何實現信號的捕捉

4.2. sigaction

4.3. pause

4.4. 可重入函數

4.5. sig_atomic_t類型與volatile限定符

4.6. 競態條件與sigsuspend函數

4.7. 關於SIGCHLD信號

34. 終端、作業控制與守護進程

1. 終端

1.1. 終端的基本概念

1.2. 終端登錄過程

1.3. 網絡登錄過程

2. 作業控制

2.1. Session與進程組

2.2. 與作業控制有關的信號

3. 守護進程

35. 線程

1. 線程的概念

2. 線程控制

2.1. 創建線程

2.2. 終止線程

3. 線程間同步

3.1. mutex

3.2. Condition Variable

3.3. Semaphore

3.4. 其它線程間同步機制

4. 編程練習

36. TCP/IP協議基礎

1. TCP/IP協議棧與數據包封裝

2. 以太網(RFC 894)幀格式

3. ARP數據報格式

4. IP數據報格式

5. IP地址與路由

6. UDP段格式

7. TCP協議

7.1. 段格式

7.2. 通訊時序

7.3. 流量控制

37. socket編程

1. 預備知識

1.1. 網絡字節序

1.2. socket地址的數據類型及相關函數

2. 基於TCP協議的網絡程序

2.1. 最簡單的TCP網絡程序

2.2. 錯誤處理與讀寫控制

2.3. 把client改爲交互式輸入

2.4. 使用fork併發處理多個client的請求

2.5. setsockopt

2.6. 使用select

3. 基於UDP協議的網絡程序

4. UNIX Domain Socket IPC

5. 練習:實現簡單的Web服務器

5.1. 基本HTTP協議

5.2. 執行CGI程序

A. 字符編碼

1. ASCII碼

2. Unicode和UTF-8

3. 在Linux C編程中使用Unicode和UTF-8

B. GNU Free Documentation License Version 1.3, 3 November 2008

參考書目

索引

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章