一、unix體系結構
1、unix系統的體系結構(p1 圖1-1)
2、核心的介面被稱為系統呼叫。公用函式構建在系統呼叫介面之上,應用程式即可食用公用函式庫,也可使用系統呼叫。
二、登入
1、口令檔案/etc/paaswd由7個冒號分隔的字段組成,依次是:登入名、加密口令、數字使用者id、數字組id、注釋字段、其實目錄(/home/sar)以及shell程式(/bin/ksh)。
2、shell(p2 圖1-2)
三、檔案和目錄
1、檔案系統
1)、unix檔案系統是目錄和檔案的一種層次結構,所有東西的起點是稱為根(root)的目錄,這個目錄的名稱是乙個字元「 / 「。
2)、目錄(directory)是乙個包含目錄項的檔案。在邏輯上,可認為每個目錄項都包含乙個檔名,同時還包含說明該檔案屬性的資訊。檔案屬性是指檔案型別(是普通文
件還是目錄等)、檔案大小、檔案所有者、檔案許可權(其他使用者能否訪問該檔案)以及檔案最後修改時間等。
2、檔名
1)、目錄中的各個名字稱為檔名。只有斜線(/)和空字元這兩個字元不能出現在檔名中。斜線用來分隔構成路徑名的各個檔案,空字元則用來終止乙個路徑名。為了可
2)、建立新目錄時會自動建立兩個檔名.(點)和. .(點點)。點指向當前目錄;點點指向父目錄。
3、路徑名
1)、由斜線分隔的乙個或多個檔名組成的序列(也可以以斜線開頭)構成路徑名,以斜線開頭的路徑名稱為絕對路徑名,否則稱為相對路徑名。
2)、檔案系統根名字(/)是乙個特殊的絕對路徑名,它不包含檔名。
4、工作目錄
1)、沒個程序都有乙個工作目錄,有時稱其為當前工作目錄。
2)、所有相對路徑名都從工作目錄開始解釋。
5、起始目錄
1)、登入時,工作目錄設定為其實目錄,該起始目錄從口令檔案中相應使用者的登陸項獲得。
四、輸入和輸出
1、檔案描述符
1)、檔案描述符通常是乙個非負整數,核心用以標識乙個特定程序正在訪問的檔案。
2、標準輸入、標準輸出和標準錯誤
3、不帶緩衝的i/o
1)、函式open、read、write、lseek以及close提供了不帶緩衝的i/o。
4、標準i/o
1)、標準i/o為那些不帶緩衝的i/o函式提供了乙個帶緩衝的介面。使用標準i/o函式無需擔心如何選取最佳的緩衝區大小。
五、程式和程序
1、程式
1)、程式是乙個儲存在磁碟上某個目錄中的可執行檔案。
2)、核心使用exec函式將程式讀入記憶體,並執行程式。
2、程序和程序id
1)、程式的執行例項被稱為程序。
2)、unix系統確保每個程序都有乙個惟一的數字識別符號,稱為程序id。程序id總是乙個非負整數。
3、程序控制
1)、三個程序控制的主要函式:fork、exec和waitpid
4、執行緒和執行緒id
1)、通常,乙個程序只有乙個控制線程——某一時刻執行的一組機器指令。
2)、乙個程序內的所有執行緒共享同一位址空間、檔案描述符、棧以及與程序有關的屬性。
3)、與程序相同,執行緒也用id標識。但是,執行緒id只在它所屬的程序內起作用。
六、出錯處理
1、當unix系統函式出錯時,通常會返回乙個負值,而且整型變數errno通常被設定為具有特定資訊的值。檔案中定義了errno以及可以負值與它的各種變數。
2、對errrno應當注意兩條規則:
i、如果沒有出錯,其值不會被例程刪除。因此,僅當函式的返回值指明出錯時,才檢驗其值。
ii、任何函式都不會將errno值設定為0,而且在中定義的所有變數不為0。
3、c標準函式
1)、#include
char *strerror(int errnum);
i、strerror函式將errnum對映為乙個出錯資訊字串,並且返回此字串的指標。
2)、#include
void perror(const char *msg);
i、perror函式基於errno的當前值,在標準錯誤上產生一條出錯資訊,然後返回。
ii、首先由msg指向的字串,然後是乙個冒號,乙個空格,接著是對應於errno值得出錯資訊,最後是乙個換行符。
4、出錯恢復
1)、中出錯分類:致命性的和非致命性的。
2)、致命性的的錯誤,無法執行恢復動作。最多能做的是在使用者螢幕上列印一條出錯資訊或者將一條出錯資訊寫入日誌檔案中,然後退出。對於非致命性錯誤,有事可以叫
妥善的進行處理。
七、使用者標識
1、使用者id
1)、口令檔案登入項中的使用者id是乙個數值,它向系統標識各個不同的使用者。
2)、使用者id為0的使用者為根使用者(root)或超級使用者(superuser)。在口令檔案中,通常有乙個登入項,其登陸名為root,稱這種使用者的特權為超級使用者特權。
2、組id
1)、口令檔案登入項也包括使用者的組id,它是乙個數值。組id也是由系統管理員在指定使用者登入名時分配的。一般來說,在口令檔案中有多個登入項具有相同的組id。
2)、組檔案將組名對映為數值的組id。組檔案通常是etc/group。
3、附屬組id
1)、除了口令檔案中對乙個登入名指定乙個組id外,大多數unix系統版本還允許乙個使用者屬於另外一些組。
八、訊號
1、訊號使用者通知程序發生了某種情況。
2、程序處理訊號的3種方式
1)、忽略訊號。
2)、按系統預設方式處理。
3)、提供乙個函式,訊號發生時呼叫該函式,這被稱為捕捉該訊號。
3、很多情況都會產生訊號。終端鍵盤有兩種產生訊號的方法,分別稱之為中斷鍵和退出鍵,它們被用於中斷當前執行的程序。另一種產生訊號的方法是呼叫kill函式。
九、時間值
1、日曆時間
1)、該值是自協調世界時間時(utc)2023年1月1日00:00:00這個特定時間以來所經過的秒數累計值。
2)、系統基本資料型別time_t用於儲存這種時間值。
2、程序時間
1)、也被稱之為cpu時間,泳衣度量程序使用的**處理器資源。程序時間以時鐘滴答計算。每秒鐘曾今取值為50、60、100個時鐘滴答。
2)、系統基本資料型別clock_t用於儲存這種時間值。
3)、當度量乙個程序的執行時間時,unix系統為乙個程序維護了3個程序時間值:
十、系統呼叫和庫函式
UNIX環境高階程式設計學習筆記(一)UNIX基礎知識
1.作業系統可被定義為一種軟體,它控制計算機硬體資源,提供程式執行環境。通常稱為核心 kernel 2.核心的介面被稱為系統呼叫。公共函式庫建在系統呼叫介面之上,應用程式既可使用公共函式庫,也可使用系統呼叫。shell是乙個特殊的應用程式,為執行其他應用程式提供乙個介面.3.unix檔案系統是目錄和...
unix環境高階程式設計
unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...
unix環境高階程式設計
檔案描述符file descriptor通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或建立乙個新檔案時,它都返回乙個檔案描述符。在讀寫檔案時,可以私用這個檔案描述符。按管理,每當執行乙個新程式時,所有的shell都為其開啟了3個標準檔案描述符 標準輸入,標準...