天天看點

《UNIX環境進階程式設計》筆記:第1章 UNIX基礎知識

“本章快速浏覽了UNIX系統。說明了某些以後會多次用到的基礎術語,介紹了一些小的UNIX程式執行個體。讀者可以從中大概了解到本書其餘部分将要介紹的内容。”

書中有些圖很重要,沒辦法隻好先下載下傳電子版再自己截圖了。

1.2 UNIX體系結構

《UNIX環境進階程式設計》筆記:第1章 UNIX基礎知識

這張是UNIX作業系統的體系結構。要注意的是,shell和公用函數庫并沒有把核心完全包圍,應用程式可以直接使用系統調用來和核心互動。

1.3 登陸

1.4 檔案和目錄

ls:列出目錄中的所有檔案。

man:檢視系統手冊。

cc / gcc:C編譯器。

1.5 輸入和輸出

檔案描述符是一個小的非負整數,在POSIX标準中,标準輸入的檔案描述符的值是0,标準輸出是1,标準錯誤是2,不過這些值可以人為改變。

> / <:檔案重定向,經常用來把所執行程式的标準輸出等重新指向某個檔案,進而讓原本輸出到螢幕的文字輸出到指定檔案中。

|:管道,左邊的程式的輸出和右邊程式的輸入直接聯通。

通過鍵盤輸入時,Ctrl+D通常表示檔案結束符,程式讀到此字元将認為輸入完畢。

不帶緩沖的I/O:open, read, write, lseek, close

标準I/O(帶緩沖):getc, putc, fgets等

1.6  程式和程序

程序控制函數:fork, exec, waitpid。

UNIX的程序建立和Windows完全不同,第一次看的時候絕對會非常詫異。這個樂趣我就不剝奪了,自己去書中體驗吧。

1.7 出錯處理

錯誤代碼是errno,列印出錯資訊使用函數strerror或perror。在現在的系統中,錯誤代碼是線程安全的。

錯誤代碼的兩條規則:1、如果沒有出錯,其值不會被例程清除;2、任何函數都不會将errno值設定為0。

1.8 使用者辨別

使用者ID為0的使用者即為超級使用者,一個系統中可以有多個ID為0的使用者。

附屬組ID:為了擴充使用者的權限結構而設計。總體來說,UNIX的權限結構比Windows的NTFS系統權限結構要簡陋一些。

1.9 信号

鍵盤上會産生信号的組合鍵:中斷鍵(interrupt key,通常是Delete或Ctrl+C),退出鍵(quit key,通常是Ctrl+\)。

調用kill函數可以向其他程序發送信号。

按下中斷鍵時,如果程式忽略此信号,系統就會預設終止此程序。

1.10 時間值

1. 月曆時間,UTC 1970年1月1日0時起經曆的秒數,資料類型time_t。

2. 程序時間(CPU時間),用來度量程序使用的CPU資源,資料類型clock_t。機關為滴答數,和秒有某種換算關系。程序時間有三種:

2.1 時鐘時間,又稱為牆上時鐘時間(wall clock time),它是程序運作的時間總量。

2.2 使用者CPU時間,是執行使用者指令所用的時間。

2.3 系統CPU時間,是為該程序執行核心程式所用的時間。

按書中的例子,使用者CPU時間加上系統CPU時間并不等于時鐘時間,他們之間的關系還有待求證。

1.11 系統調用和函數庫

系統調用接口總是在《UNIX程式員手冊》的第2部分中說明,是用C語言定義的,與具體系統如何調用一個系統調用的實作技術無關。

《UNIX程式員手冊》的第3部分定義了程式員可以使用的通用庫函數。雖然這些函數可能會調用一個或多個核心的系統調用,但是它們并不是核心的入口點。

系統調用和庫函數之間的一個差别是:系統調用通常提供一種最小接口,而庫函數通常提供比較複雜的功能。

《UNIX環境進階程式設計》筆記:第1章 UNIX基礎知識
《UNIX環境進階程式設計》筆記:第1章 UNIX基礎知識

習題 1.2

程序ID為852和853的程序,在我們的兩次調用之間被建立了。

繼續閱讀