1. 程式人生 > >《Unix-Linux程式設計實踐教程》讀書筆記(一)

《Unix-Linux程式設計實踐教程》讀書筆記(一)

寫在最前:

         第一遍:零零散散的花了近兩個月的時間讀了本書的第一遍,這是一本很適合剛剛掌握一些計算機基礎知識的人讀的書。學習的思路非常明確,能做什麼?怎麼做?自己動手?三個方面符合認知順序,由淺入深讓人易於接受;而且每章的內容相對獨立和簡單,適合初次接觸類Unix系統程式設計的人員逐個瞭解和實踐。總之,從難易程度而言,也許這本書真的很適合作為APUE的前奏。

第一章  Unix系統程式設計概述

1.      學習思路:本書主要通過分析Unix系統具體功能(Unix命令),分析功能實現所使用的系統呼叫(函式),進而指導讀者自行編寫相應的程式設計實現,來學習Unix系統程式設計。

2.      使用圖示來說明系統或者子模組的模型,這樣的方式可以很直觀的描述結構

系統模型的一步一步複雜化,使得出現了記憶體使用者空間、核心空間的區分,在不同的空間中執行著普通程式,和核心程式;

核心程式的職能也進一步被確定。

3.      作業系統(也被稱作核心)負責將不同的使用者、裝置、應用程式連線起來。記憶體分為使用者空間和核心空間,其中核心空間是上述各部分連線的中樞。

4.      編寫上層應用程式的時候,感覺像是應用程式直接操作裝置,但其實中間有透明的作業系統提供的支援。作業系統程式設計,需要知道系統的結構和工作方式,要知道核心提供哪些服務,如何使用它們,系統有哪些資源和裝置,不同的裝置和資源如何操作等。

5.      系統資源:處理器、輸入輸出、程序管理、記憶體、裝置、計數器、程序間通訊、網路。

6.      如何理解包含上述系統資源的系統服務的機制:三個問題來學習(學習思路的具體化)。

1)  分析程式:瞭解程式的功能和實現原理。

2)  學習系統呼叫:程式中用到哪些系統呼叫、每個系統呼叫的功能和使用方法。

3)  程式設計實現:使用學習的實現原理和系統呼叫程式設計實現相同的功能。

7.      從使用者體驗的角度來理解Unix

1)  登陸與登出:使用者登陸時,系統啟動單獨的一個shell程序來處理該使用者的請求(多使用者環境);使用者登出時,系統結束分配給該使用者的shell程序。

2)  目錄操作:目錄樹(組織結構、各個子目錄的特定用途)、目錄操作命令(ls、cd、pwd、mkdir/rmdir、)、目錄操作命令的工作原理(涉及到系統怎麼儲存描述目錄樹的資訊,以及不同目錄操作命令對應的對這些資訊的修改)。

3)  檔案操作:檔案操作命令(命名規則、cat/more/less/pg檢視檔案內容、cp檔案複製、rm檔案刪除、mv檔案移動或重新命名、lpr/lp檔案列印)、檔案操作命令的工作原理(同樣涉及到系統怎麼儲存檔案的控制資訊和檔案的資料資訊,以及不同的檔案操作命令對應的對這些資訊的修改)、檔案許可許可權(怎樣檢視檔案的許可許可權,檔案許可權具體指什麼,怎樣修改檔案許可許可權,檔案許可許可權的工作原理即什麼時候怎麼使用該檔案許可權資訊)。

8.      從系統的角度來理解Unix

1)  以網路橋牌的例子說明系統要實現其各個組成部分之間的協調統一(通訊、協作、網路訪問)。

2)  bc---Unix計算器、ps命令的使用、man聯機幫助的使用、逆波蘭表示式、bc和dc通過管道進行協作、dc基於棧的工作原理。

3)  從bc/dc到Web:使用者端和伺服器。

獨立程式之間的連結、資訊共享、協作是系統中的重要部分。

9.      動手實踐(more命令三個步驟的分析)

1)  實際使用more命令來顯示檔案內容(三種使用情景),觀察執行的細節。

2)  more的實現過程(虛擬碼)

3)  more的程式設計實現。

讀懂程式碼的標準是自己能夠理解程式執行的原理,程式碼的邏輯,能夠自己編寫相同的程式碼。RTFSC(何況本書中的程式碼不是很Fucking哦)!CODING

more01.c大概實現了more程式的基本功能;more02.c處理了重定向時標準輸入被覆蓋的處理方式(從/dev/tty直接讀取使用者的輸入);但是,對於鍵盤輸入不要回顯、在輸入q和空格的時候不需要按Enter鍵、顯示當前顯示佔檔案大小的百分比、不同終端(vt100等,這個在sourceCRT中選擇終端型別時見過)的處理等在後續章節學習。

熟悉系統呼叫:fopen(),flose(), fgets(), fputs(), getchar(), getc()

10.  工作步驟與概要圖

1)  工作步驟總是按照之前說明的三步進行:分析程式原理、學習系統呼叫、程式設計實踐。

2)  Unix概要圖:系統各部分進行協作的中樞是核心,核心及其資料結構存放在核心空間。

3)  Unix的發展歷程。

11.  小結

Unix核心對資源和程式進行管理;使用者程式訪問裝置必須經過核心;一些Unix系統功能由多個程式協作實現;編寫系統程式必須對系統呼叫和相關的資料結構有深入的理解。

----------------------------------------------------------------------------------------

本文連結http://blog.csdn.net/yongchurui/article/details/22333785

2014.03.27