《Unix環境高階程式設計》Note 第一章基礎知識

2021-10-01 02:51:32 字數 2359 閱讀 9291

1.引言

作業系統為應用軟體提供服務,包括排程程序,管理記憶體,檔案系統,網路協議棧,裝置驅動等等。

2.unix體系結構

核心 -> 系統呼叫 -> shell & 公用函式庫(e.g. glibc) -> 應用程式

核心 -> 系統呼叫 -> 應用程式

補充:執行應用程式時處於使用者態,進行系統呼叫後進入核心態

3.登入

1.登入檔案:/etc/passwd 檔案

2.命令列直譯器shell:bourne shell,korn shell和bourne-again shell,dash(debian almquist shell)

4.檔案和目錄

1.檔案系統:目錄和檔案的一種層次結構

2.檔名

3.路徑名 :遍歷路徑下檔案ls實現,dirent.h標頭檔案、opendir函式、readdir函式

4.工作目錄:程序具有自己的工作目錄,可以用chdir函式更改程序的工作目錄

5.起始目錄:被載入為啟動時的工作目錄

5.輸入和輸出

1.檔案描述符

2.標準輸入、標準輸出和標準錯誤 : 標準輸入輸出的檔案描述符 stdin_fileno 和 stdout_fileno

3.不帶緩衝的io: open、read、write、lseek和close,都使用檔案描述符對檔案操作

4.標準io: 如gets,為不帶緩衝的io提供了乙個緩衝(有塊緩衝、行緩衝和無緩衝)

補充:標準io屬於公共函式庫的範疇,而不帶緩衝的io屬於系統呼叫的範疇

6.程式和程序

1.程式:未被載入的**,被核心exec

2.程序和程序id:程式的執行例項為程序,每個程序有自己的程序id

3.程序控制:fork,exec和waitpid

4.執行緒和執行緒id:執行緒是某一時刻執行的一組機器指令,通常乙個程序只有乙個控制線程,多控制線程可以利用多核能力

思考:程序用於排程不同程式?(記憶體),執行緒用於用於排程不同cpu核?(執行)

7.出錯處理

1.errno值:當unix的系統(核心與系統呼叫)函式出錯時,通常該函式會返回乙個負值,且(該程序或執行緒?)事先定義的乙個整型變數errno將會被設定為乙個具有特定資訊的值。

如open函式出錯時會返回-1,且此時errno會被賦值為15種不同errno值(如許可權不夠、檔案不存在)之一。

可以使用strerror(int errnum)函式或者perror(const char *msg)函式將errno的值轉換為其對應的字串資訊。

#include

#include

// exit函式標頭檔案

#include

// strerror函式標頭檔案

#include

// errno變數

intmain

(int argc,

char

*ar**)

輸出如下:

eacces:permission denied

file: no such file or directory

2.出錯恢復:致命性出錯一般只能列印後退出;非致命性錯誤如資源短缺可以延遲後再重試,資源相關的非致命性錯誤包括eagain、enfile、enobufs、enolck、enospc、ewouldblock等

8.使用者標識

1.使用者id:用於讓系統標識不同的使用者,root使用者的使用者id為0( 或使用者id為0的使用者為根使用者或超級使用者),使用者id是口令檔案登入項的乙個屬性

2.組id:也是口令檔案登入項的乙個屬性,同組使用者可以通過修改許可權設定共享檔案,使用者id和使用者組id是為了讓磁碟上的檔案不需要儲存ascii登入名及組名,而只需要4個位元組儲存id就可以了,使用者id與使用者登入名、組id與組名的對映關係存在於口令檔案和組檔案中,組檔案通常是/etc/group

3.附屬組id:乙個使用者可以存在於多個附屬組中

9.訊號

訊號用於通知程序發生了某種情況,程序對於訊號可以有三種處理方式:忽略訊號、按系統預設方式處理或者提供乙個函式以備訊號發生時呼叫,即捕捉訊號

10.時間值

11.系統呼叫和庫函式

1.系統呼叫:直接進入核心的入口點

2.庫函式:有可能wrap了系統呼叫,有可能沒有使用系統呼叫,如strcpy和atoi

小結:第一章介紹unix的一些基礎知識以及unix系統為維護乙個程序、檔案系統等所提供的一些內容。

unix環境高階程式設計

unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...

unix環境高階程式設計

檔案描述符file descriptor通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或建立乙個新檔案時,它都返回乙個檔案描述符。在讀寫檔案時,可以私用這個檔案描述符。按管理,每當執行乙個新程式時,所有的shell都為其開啟了3個標準檔案描述符 標準輸入,標準...

UNIX環境高階程式設計

本書是被譽為unix程式設計 聖經 的advanced programming in the unix environment一書的更新版。在本書第1版出版後的十幾年中,unix行業已經有了巨大的變化,特別是影響unix程式設計介面的有關標準變化很大。本書在保持了前一版風格的基礎上,根據最新的標準對...