“本章快速浏覽了UNIX系統。說明了某些以後會多次用到的基礎術語,介紹了一些小的UNIX程式執行個體。讀者可以從中大概了解到本書其餘部分将要介紹的内容。”
書中有些圖很重要,沒辦法隻好先下載下傳電子版再自己截圖了。
1.2 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部分定義了程式員可以使用的通用庫函數。雖然這些函數可能會調用一個或多個核心的系統調用,但是它們并不是核心的入口點。
系統調用和庫函數之間的一個差别是:系統調用通常提供一種最小接口,而庫函數通常提供比較複雜的功能。
習題 1.2
程序ID為852和853的程序,在我們的兩次調用之間被建立了。