天天看點

Unix基礎知識1 引言2 Unix體系結構3 登入4 檔案和目錄5 輸入和輸出6 程式與程序7 出錯處理8 使用者辨別9 信号10 時間值11 系統調用與庫函數

  版權聲明:本文參考了《Unix環境進階程式設計》、《Linux man pages》。 未經作者允許,嚴禁用于商業出版,否則追究法律責任。網絡轉載請注明出處,這是對原創者的起碼的尊重!!!

1 引言

2 Unix體系結構

  作業系統就是一種控制計算機硬體資源,提供程式運作環境的軟體。

  系統調用:核心的接口。

  Unix的體系結構由内到外為:核心、系統調用、shell和函數庫、使用者程式。

3 登入

  登入時,作業系統依據使用者名檢視密碼檔案/etc/password。

  密碼檔案由登入項組成。每個登入項由7個以冒号分隔的字段組成。格式如:

使用者名:加密密碼:數值使用者ID:數值組ID:注釋:起始目錄:shell程式

  shell程式是指令行解釋器,讀取使用者輸入,執行指令。其輸入可以是鍵盤輸入或者shell腳本。 一般位于/bin/*sh。Linux 常用的是bourne-again shell。

  使用者登入後系統依據登入項中的最後一字段來啟用哪種shell程式。

4 檔案和目錄

  檔案系統:Unix采用目錄和檔案的層次結構。起點為根目錄。名字為“/”。

  目錄:目錄是包含目錄項的檔案。每個目錄項包含檔案名和檔案屬性。每個目錄中都自動建立兩個檔案“.”和“..”,分别指向目前目錄和其父目錄。

  檔案:資料的集合,包含檔案名和資料。檔案名不能包含字元/和字元NUL。

  路徑名:由/分隔或開頭的多個檔案名組成的序列。以根目錄開始的稱為絕對路徑,否則,稱為相對路徑。

  工作目錄:目前正在使用的目錄稱為(目前)工作目錄,相對路徑由目前工作目錄開始解釋。

  起始目錄:登入時的目前目錄。由密碼檔案的登入項中設定。

5 輸入和輸出

  檔案描述符:

。程序啟動時,shell自動為其打開标準輸入(STDIN_FILENO)、标準輸出(STDOUT_FILENO)和标準出錯(STDERR_FILENO)3個檔案描述符。

  不帶緩沖的IO:使用檔案描述符進行IO操作。

  标準IO:标準IO為不帶緩沖的IO函數提供了帶緩沖的接口。

6 程式與程序

  程式:在外存中的可執行檔案。核心使用exec函數将程式載入記憶體并執行。

  程序:程式執行的實體,是配置設定資源的基本機關。程序ID:系統用于唯一辨別程序的非負整數。

  程序控制:fork、exec族、popen、system、exit、wait和waitpid。

  線程:線程是輕量級程序,同一程序内的線程共享位址空間、檔案描述符等資源。但具有獨立的函數棧。線程ID:用于程序内唯一辨別某線程的非負整數。

7 出錯處理

  頭檔案

#include<string.h>

char* strerror(int errnum)
           

  strerror函數傳回errnum錯誤對應的出錯消息。

#include<stdio.h>

void perror(const char *msg)
           

  perror函數輸出msg所指的字元串,然後輸出冒号、空格、errno對應的出錯消息和換行符。

8 使用者辨別

  使用者ID:OS用于唯一辨別使用者的非負整數,存放在密碼檔案登入項。使用者不能更改自己使用者ID。UID=0的使用者為超級使用者,登入名為root。

  組ID:OS用于唯一辨別使用者組的非負整數。友善組内成員資源共享。組檔案/etc/group将組名映射為組ID。

  附屬組ID:一個使用者可以屬于多個組。其它組的組ID的集合叫做附屬組ID。

9 信号

  信号:用于通知程序發生了某種狀況。

  程序收到信号後的反應:忽略、預設處理、自定義處理。

  終端産生信号的辦法:CTRL+C發出中斷信号,CTRL+\發出退出信号并産生core檔案。

10 時間值

  Unix使用月曆時間和程序時間。

  月曆時間:自1970年1月1日0時0分0秒以來經過的秒數累計值。用系統基本資料類型time_t存放。

  程序時間:以CPU的時鐘滴答計算。用系統基本資料類型clock_t存放。

  Unix為一個程序維護三個時間:時鐘時間、使用者CPU時間、系統CPU時間。

  同時有三個計時器:真實計時器(記錄時鐘時間)、虛拟計時器(記錄使用者CPU時間)、實用計時器(記錄使用者CPU時間+系統CPU時間)。

11 系統調用與庫函數

  系統調用是核心的入口。和庫函數有本質差別。但使用者并不關心。

  差別:

    (1)本質不同。

    (2)職責不同。

    (3)使用者可以調用庫函數和系統調用,很多庫函數則會調用系統調用。

    (4)系統調用功能單一,庫函數功能複雜。

  版權聲明:本文參考了《Unix環境進階程式設計》、《Linux man pages》。 未經作者允許,嚴禁用于商業出版,否則追究法律責任。網絡轉載請注明出處,這是對原創者的起碼的尊重!!!

繼續閱讀