UNIX環境高級編程學習筆記(一)UNIX基礎知識

1.操作系統可被定義爲一種軟件,它控制計算機硬件資源,提供程序運行環境。通常稱爲內核(kernel)。
2.內核的接口被稱爲系統調用。公共函數庫建在系統調用接口之上,應用程序既可使用公共函數庫,也可使用系統調用。shell是一個特殊的應用程序,爲運行其他應用程序提供一個接口.
3.Unix文件系統是目錄和文件的一種層次結構,所有東西的起點是稱爲根(root)的目錄,該目錄的名稱是”/”。目錄是一個包含目錄項的文件。在邏輯上,可以認爲每個目錄項都包含一個文件名,同時還包含說明該文件屬性的信息。文件屬性包括文件類型,文件長度,文件所有者,文件的訪問權限和修改時間等。
4.目錄中的各個名字稱爲文件名。不能出現在文件名中的字符只有兩個,斜線( / )和空操作符(n u l l)。創建新目錄時會自動創建兩個文件名:.(點)和 ..(點點)。點指向當前目錄,點點指向父目錄。在根目錄中,點和點點相同。
5.路徑名分爲絕對路徑和相對路徑。以斜線(/)開頭的稱爲絕對路徑,否則爲相對路徑。
6.在APUE中,許多程序都包含頭文件apue.h,它定義了許多常量和函數原型,在使用書中的代碼之前,需要進行一些配置。
7.每個進程都有一個工作目錄,有時稱爲當前工作目錄。所有相對路徑名都從工作目錄開始解釋。進程可以用c h d i r函數更改其工作目錄。
8.登錄時,工作目錄設置爲起始目錄,該起始目錄從口令文件中的登錄項中取得。
9.文字描述符是一個小的非負整數,內核用以標識一個特定進程正在存訪的文件。當內核打開一個現存文件或創建一個新文件時,它就返回一個文件描述符。當讀、寫文件時,就可使用它。
10.每當運行一個新程序時,所有的shell都爲其打開三個文件描述符:標準輸入、標準輸出以及標準出錯。如果像簡單命令l s那樣沒有做什麼特殊處理,則這三個描述符都連向終端。
11.函數open、read、write、lseek、以及close提供了不帶緩衝的I/O。這些函數都用文件描述符進行工作。
12.標準I/O函數提供一種對不用緩存的I/O函數的帶緩存的界面。使用標準I/O可無需擔心如何選取最佳的緩存長度。另一個使用標準I/O函數的優點與處理輸入行有關(常常發生在UNIX的應用中)。例如,fgets函數讀一完整的行,而另一方面,read函數讀指定字節數。我們最熟悉的標準I/O函數是printf。在調用printf的程序中,總是包括 stdio.h頭文件。
13.程序是一個存儲在磁盤上某個目錄中的可執行文件。內核使用exec函數(7個exec函數之一),將其讀入內存,並執行。
14.程序的執行實例被稱爲進程。UNIX系統確保每個進程都有一個唯一的非負的數字標識符,稱爲進程ID,可用getpid()得到。
15.進程控制的三個主要函數爲:fork、exec和waitpid。
16.通常進程只有一個控制線程——某一時刻執行的一組機器指令。對於某些問題,如果有多個控制線程分別作用於它的不同部分,解決起來容易的多。多線程也可以充分利用多處理器系統的並行能力。一個進程的所有線程共享同一地址空間、文件描述符、棧以及進程相關的屬性。因次,各線程訪問共享數據時需要進行同步。線程也有ID,它只在進程內部有意義。
17.當UNIX函數出錯時,往常返回一個負值,而且整型變量errno通常設置爲具有特定信息的一個值。例如,open函數如成功執行則返回一個非負文件描述符,如出錯則返回-1。在open出錯時,有大約1 5種不同的errno值(文件不存在,許可權問題等)。某些函數並不返回負值而是使用另一種約定。例如,返回一個指向對象的指針的大多數函數,在出錯時,將返回一個null指針。文件errno. h中定義了變量errno以及可以賦與它的各種常數。
18.口令文件登錄項中的用戶ID(user ID)是個數值,它向系統標識各個不同的用戶。系統管理員在確定一個用戶的登錄名的同時,確定其用戶ID。用戶不能更改其用戶ID。通常每個用戶有一個唯一的用戶ID。用戶I D爲0的用戶爲根( root)或超級用戶( superuser )。口令文件登錄項也包括用戶的組I D(group ID),它也是一個數值。組ID也是由系統管理員在確定用戶登錄名時分配的。一般來說,在口令文件中有多個記錄項具有相同的組ID。在UNIX下,組被用於將若干用戶集合到課題或部門中去。這種機制允許同組的各個成員之間共
享資源(例如文件)。
19.信息是通知進程已發生某種條件的一種技術。進程如何處理信號有三種選擇:
- (1)忽略該信號。有些信號表示硬件異常,如除以0或訪問進程地址空間以外的單元等。因爲這些異常產生的後果不確定,所以不推薦使用這種處理方式。
- (2)按系統默認方式處理。對於0除,系統默認方式是終止該進程。
- (3)提供一個函數,信號發生時則調用該函數。使用這種方式,我們將能知道什麼時候產生了信號,並按所希望的方式處理它。
很多條件會產生信號。有兩種鍵盤方式,分別稱爲中斷鍵(interrupt key,通常是delete鍵或Ctrl- C )和退出鍵(quit key,通常是Ctrl - \ ),它們被用於中斷當前運行進程。另一種產生信號的方法是調用名爲kill的函數。在一個進程中調用此函數就可向另一個進程發送一個信號。當然這樣做也有些限制:當向一個進程發送信號時,我們必需是該進程的所有者。
20.日曆時間,可用於記錄文件最近一次的修改時間等。進程時間。這也被稱爲CPU時間,用以度量進程使用的中央處理機資源。當度量一個進程的執行時間時,UNIX系統使用三個進程時間值:時鐘時間、 用戶CPU時間、 系統CPU時間。進程運行的時間總量,其值與系統
中同時運行的進程數有關。用戶CPU時間是執行用戶指令所用的時間量。系統CPU時間是爲該進程執行內核所經歷的時間。
21.從執行者的角度來看,系統調用和庫函數之間有重大區別,但從用戶角度來看,其區別並不非常重要。在本書中系統調用和庫函數都以C函數的形式出現,兩者都對應用程序提供服務,但是應當理解,如果希望的話,我們可以替換庫函數,但是通常卻不能替換系統調用。應用程序可以調用系統調用或者庫函數,而很多庫函數則會調用系統調用。系統調用和庫函數之間的另一個差別是:系統調用通常提供一種最小界面,而庫函數通常提供比較複雜的功能。

發佈了20 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章