UNIX環境高階程式設計學習筆記(一)UNIX基礎知識

2021-07-02 19:38:48 字數 2849 閱讀 9491

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函式的形式出現,兩者都對應用程式提供服務,但是應當理解,如果希望的話,我們可以替換庫函式,但是通常卻不能替換系統呼叫。應用程式可以呼叫系統呼叫或者庫函式,而很多庫函式則會呼叫系統呼叫。系統呼叫和庫函式之間的另乙個差別是:系統呼叫通常提供一種最小介面,而庫函式通常提供比較複雜的功能。

UNIX環境高階程式設計學習筆記

include include include include int main int argc,char argv err sys can t open s argv 1 while dirp readdir dp null printf s n dirp d name closedir dp ...

UNIX環境高階程式設計學習筆記 程序

2.程序控制 在提出這個問題的時候,我想了一下,大概就是核心執行的乙個程式 錯誤回答 吧。但是這麼說,連我自己下次看都不明白在說什麼。於是我查了一下,它代表著cpu所能處理的單個任務,及執行例項。在面向程序設計的系統 如早期 unix,linux 2.4及更早版本中 程序是程式的基本執行實體 在面向...

Unix環境高階程式設計學習筆記 二

三種主要的標準 iso c ieee posix single unix specification xsi 一層一層遞增,ieee posix 是iso c的超集。xsi 是posix的超集。要想提高軟體的可移植性,就必須有限制 編譯時限制 因為某些限制是固定的,則可以在標頭檔案中定義。執行時限制...