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...