學習C高階(二十)

2021-09-26 14:11:10 字數 3911 閱讀 5053

linux系統程式設計

linux網路程式設計

作業系統基礎 (operating system)

程式執行時的分割槽

乙個軟體的設計流程

理解相關函式作用的前提下,用**模板加深對相關概念的理解

以理解概念為主,以相關函式為輔

概念 ----- 更重要

stdio.h

printf sprintf

scanf sscanf

fopen

fseek ftell — 操控檔案內容指示位置 (位置指示器)

fgetc fputc fgets fputs fprintf fscanf — 讀寫文字檔案

fread fwrite ---- 讀寫二進位制檔案

fclose

string.h

strlen

strcpy strncpy

strcat strncat

strchr strstr

strcmp strncmp strcasecmp strncasecmp

memset memcpy memcmp memmove

strlib.h

malloc free

srand rand

qsort

math.h -lm

sqrt pow

自定義函式 ---- 實現者 使用者

別人寫好的函式 ----- 使用者

1) 庫函式—c語言標準函式庫

2) 作業系統提供的 ---- 系統呼叫

3) 第三方函式 ---- 公司單位提供

返回值型別 函式名(形參1型別 形參1名字,形參2型別 形參2名字,…,形參n型別 形參n名字)

實現者思維:

1) 確定函式功能 ---- 功能盡量單一 ----函式名

2) 確定實現功能需要的已知條件 ---- 形參

3) 如何將功能結果反饋給使用者 ---- 返回值 指標型別的形參

4) 注釋形式寫出由已知條件實現功能的步驟

5) 按注釋步驟實現**

形參:形式引數,在形式上告訴呼叫者使用該函式功能必須提供哪些已知條件

什麼時候需要自定義函式? — 函式在程式中的作用有哪些?

1) 功能型函式 ----- 可以多處使用同一功能(解決重複勞動)

2) 拼裝型函式 ----- 通過呼叫其它函式來實現自身功能

3) 簡化邏輯型函式 ---- 簡化某乙個實現邏輯而作的輔助型函式

使用者思維:

1)確定函式功能:通過函式名可以知道明面上的功能,但有些函式還有隱藏功能(函式名無法給出)

2) 需要提供哪些東西給函式 ---- 形參

每個形參的作用

3) 如何獲取處理結果 ---- 返回值 指標型別的形參

某些形參的作用

返回值的作用

函式還有隱藏功能,如fread函式的隱藏功能-- 從位置指示器當前指示位置開始讀資料到指定記憶體,讀成功幾個位元組後再將位置指示器加幾

函式宣告用於協助編譯器檢查函式呼叫是否正確

包含標頭檔案 ----- 別人寫的

手動宣告 ---- 自己寫的

(外設訪問)

作業系統原生io操作-------檔案、檔案系統、描述符

(多工程式設計)

多程序 -------程序

程序間通訊(ipc) -------訊號、管道

多執行緒 --------執行緒

執行緒同步 --------訊號量、互斥鎖、臨界區

網路程式設計 ------- 協議、協議棧、mac位址、ip位址、埠號、tcp、udp

壓榨硬體使用價值的歷史

無作業系統時代

a. 兩個程式執行之間有時間空隙

b. 人工監控

批處理系統時代----- 監控程式

解決了:

a. 兩個程式執行之間有時間空隙

b. 不再需要人工監控

新的問題:

需要從外設獲取資料的程式,在外設資料沒有準備好的情況下會出現等待

多道系統時代 — 多道批處理程式

既監控程式是否執行結束,又監控程式是否等待外設資料

出現新的需求 ---- 希望同時跑多個程式

多工系統時代

多核cpu:一定程式上實現真正的並行執行多個任務

單核cpu:

單核cpu多工實現原理 ---- 分時機制

偽並行 ---- 利用人類對時間刻度的感覺差

輪流使用cpu時間片 ----- 時間片輪轉

作業系統的模組劃分

1) 任務管理 ------ 最核心的模組

2) 記憶體管理 ------ 次核心的模組

3) 裝置管理 ------ 驅動程式

4) 網路管理 ------ 實現各種協議棧

5) 檔案管理 ------ 如何訪問外存中的檔案和特殊檔案

6) 啟動管理

7) 使用者管理 — 多使用者作業系統才有的模組

使用者(使用者名稱) 使用者組(組名)

目錄可執行是指能不能將該目錄作為當前工作目錄來用(能不能cd進去)

作業系統的核心管理物件 ------ 執行流

什麼是執行流: 總體上順序執行的**

執行流分類:

異常服務程式 — 不參與時間片輪轉,霸道執行流:打斷任務流執行,

一次執行完所有**

任務流 — 參與時間片輪轉

程序執行緒

任務五狀態

兩個基本狀態:

1) 就緒態:等待進入執行態的狀態

2) 執行態(執行態):占用時間片執行**的狀態

三個特殊狀態:

3) 暫停態:由於外部的干擾讓程式暫時停止執行,而不是自身邏輯引起的

如:gdb除錯程式

4) 睡眠態(阻塞態):由於程式自身邏輯的需要,

必須要等待某個條件成立或獲取到相應資源才能繼續執行後續**的狀態

5) 僵死態:任務退出後,但任務所占用的資源還未被系統**

殭屍任務

函式分類 ----- 阻塞、非阻塞

阻塞型函式:可能會引起呼叫任務進入睡眠態

非阻塞型函式:不可能引起呼叫任務進入睡眠態

棧區:非static區域性變數,形參

filo(先進後出)

大小有限(8m) 棧區如果被用完會造成棧溢位的段錯誤

堆區:手動申請 手動釋放

記憶體洩露:動態申請的記憶體空間程式不再使用後沒有及時釋放

p =

malloc

(100);

....

//使用動態空間的**

free

(p);

//1 ------ 沒有記憶體洩露

//以下**不再使用該動態空間

while()

//30分鐘

free

(p);

//2 ------ 有30分鐘的記憶體洩露..

..//5分鐘

free

(p);

//3 ------ 有35分鐘的記憶體洩露

//程式退出

資料區:static區域性變數、static全域性變數、非static全域性變數、字串常量

特殊唯讀段:只能讀不能改,字串常量、const修飾的static區域性變數、static全域性變數、非static全域性變數

生存期:整個程式執行期

**區:二進位制指令 ----- 函式指標

需求分析

軟體設計

軟體實現—編碼(20%)

整合測試

c 學習高階

第一層次,c 基礎 挑選一本入門書籍,如 c primer c 大學教程 或stroustrup撰寫的經典 c 程式語言 或他一年半前的新作 c 程式設計原理與實踐 而一般c 課程也止於此,另外 c 標準程式庫 及 the c standard library extensions 可供參考 第二層...

c 高階學習

以後可能要做c 開發了。記錄要看的書和可能用的技術,讓自己有個學習的方向。1.語言基礎 2.演算法與資料結構基礎 3.多執行緒開發基礎 4.資料庫 5.網路程式設計 6.記憶體資料庫技術 經驗貼 經驗貼 劍指offer 深入理解計算機系統 more effective c 深入理解c 11 程式設計...

C 高階剖析( 二十五)之類模板

1.1 類模板 1.1.1思考 1.1.2 1.1.3 c 中的類模板 template typename t class operator 1.1.4 c 中的類模板的應用 operator int op1 operator op2 int i op1.op 1,2 string s op2.op...