目錄
unix體系結構:
登入:shell:
檔案和目錄:
1、檔案系統:
2、檔名:
3、路徑名:
4、工作目錄:
輸入輸出
1、檔案描述符(file descriptor):
2、標準輸入、標準輸出和標準錯誤:
3、不帶緩衝的io:
4、標準i/o
程式和程序
1、程式:
2、程序和程序id:
3、程序控制:
4、執行緒和執行緒id:
時間值:
系統呼叫和庫函式:
目錄
從嚴格意義上講,可將作業系統定義為一種軟體,它控制計算機硬體資源,提供程式執行環境。我們通常將這種軟體稱為核心(kernel),因為他相對較小,而且位於環境的核心。顯示了unix系統的體系結構。
核心的介面被稱為系統呼叫(system call)。公用函式庫構建在系統呼叫介面只是,應用程式即可使用公用函式庫,也可以使用系統呼叫。shell是乙個特殊的應用程式,為執行其他應用程式提供乙個介面。
系統口令檔案通常是/etc/passwd。口令檔案中的登入項由7個以冒號分隔的字段組成,依次是:登入名、加密口令、數字使用者id、注釋字段、起始目錄(/home/sar)以及shell程式(/bin/ksh)。
目前,所有的系統已將加密口令移到另乙個檔案中。
shell是乙個命令列直譯器,它讀取使用者輸入,然後執行命令。
unix檔案系統是目錄和檔案的一種層次結構,所有東西的起點是稱為根(root)的目錄,這個目錄的名稱是乙個字元「/」。
目錄(directory)是乙個包含目錄項的檔案。在邏輯上,可以認為每個目錄項都包含乙個檔名。同時還包含說明該檔案屬性的資訊。檔案屬性是指檔案型別(是普通檔案還是目錄等)、檔案大小、檔案所有者、檔案許可權(其它使用者能否訪問該檔案)以及檔案最後的修改時間等。stat和fstat函式返回包含所有檔案屬性的乙個資訊結構。
注:目錄項的邏輯檢視與時間存在磁碟上的方式是不同的。unix檔案系統的大多數實現並不在目錄項中存放屬性,這是
因為當乙個檔案具有多個硬鏈結時,很難保持多個屬性副本之間的同步。
建立新目錄時會自動衝擊兩個檔名:.(稱為點)和..(稱為點點)。點指向當前目錄,點點指向父目錄。在最高層次的根目錄中,點點與點相同。
由斜線分隔的乙個或多個檔名組成的序列(也可以斜線開頭)構成路徑名(pathname),以斜線開頭的路徑名稱稱為絕對路徑(absolute pathname),否則稱為相對路徑名(relative pathname)。相對路徑名指向相對於當前目錄的檔案。檔案系統根的名字是乙個特殊的絕對路徑名,它不包含檔名。
#include "apue.h"
#include int main(int argc, char *ar**)
if ((dp = opendir(ar**[1])) == null)
while ((dirp = readdir(dp)) != null)
}
每乙個程序都有乙個工作目錄(working directory),有時也稱為當前工作目錄(current working directory)。所以相對路徑名都從工作目錄開始解釋。程序可以用chdir函式更改工作目錄。
通常是乙個小的非負整數,核心用以表示乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或者建立乙個新檔案時,它都返回乙個檔案描述符。在讀、寫檔案時,可以使用這個檔案描述符。
按照慣例,每當執行乙個新程式時,所有的shell都為其開啟三個檔案描述符,既標準輸入(standard input)、標準輸出(standard output)以及標準錯誤(standard error)。
函式open、read、write、lseek以及close提供了不帶緩衝的i/o。這些函式都使用檔案描述符。
#include "apue.h"
#define buffersize 4096
int main(void)
}if (n < 0)
exit(0);
}
標準i/o函式為那些不帶緩衝的i/o函式提供了乙個帶緩衝的介面。使用標準i/o函式無須擔心如何選取最佳的緩衝區大小。使用標準i/o函式還能建行對輸入行的處理。例如,fgets函式讀取乙個完成的行,而read函式讀取指定位元組數。
函式fgetc一次讀取乙個字元,然後函式putc將此字元寫到標準輸出。讀到輸入的最後乙個位元組時,getc返回常量eof。
程式是乙個儲存在磁碟上某個目錄的可執行檔案。核心使用exec函式將程式讀入記憶體並執行程式。
程式的執行例項稱為程序(process)。某些作業系統用任務(task)來表示正在被執行的程式。
unix系統確保每乙個程序都有乙個唯一的數字識別符號,稱為程序id(process id)。程序id總是乙個非負整數。
#include "apue.h"
int main(void)
有三個用於程序控制的主要函式:fork、exec和waitpid。(exec函式有7中變體,但經常把它們統稱為exec函式。)
//todo
乙個程序內的所有執行緒共享同一位址空間、檔案描述符、棧以及與整合相關的屬性。因為它們能訪問同一儲存區,所以各執行緒在訪問共享資料時需要採取同步措施以避免不一致性。
與程序相同,執行緒也用id標識。但是,執行緒id只在它所屬的程序內起作用。乙個程序中的執行緒id只在它所屬的程序中起作用。乙個程序中的執行緒id在另乙個程序中沒有意義。在乙個程序中對某個特定的執行緒進行處理時,我麼可以使用該執行緒的id引用它。
unix系統有兩種不同的時間值。
系統基本資料型別time_t用於儲存這種時間值。
系統基本資料型別clock_t儲存這種時間值。
所有的作業系統都提供多次服務的入口點,由此程式想核心請求服務。各種版本的unix實現都提供良好定義、數量有限、直接進入核心的入口點,這些入口點被稱為系統呼叫(system call)。
《UNIX教程》讀書筆記 一
unix教程 讀書筆記 part i unix shell 1 檔案型別 2 該變許可權位 chmod命令的一般格式為 chmod who operator permission filename w h o的含義是 u 檔案屬主許可權。g 同組使用者許可權。o 其他使用者許可權。a 所有使用者 檔...
Unix網路程式設計讀書筆記(二)
套接字位址結構 typedef uint32 t in addr t struct in addr struct sockaddr in 在使用結構前總是把整個結構置零,是由於sin zero欄位沒有任何作用,只需置零即可。為了是套接字函式在處理位址時具有一定的通用性,套接字函式還定義了通用套接字位...
Unix網路程式設計讀書筆記(四)
unix下共有5種i o模型 阻塞式i o 非阻塞式i o i o復用 select和poll 訊號驅動式i o sigio 非同步i o posix的aio 系列函式 同步i o與非同步i o 同步i o操作導致請求程序阻塞,直到i o操作完成。前4種模型都是同步i o模型,因為其中真正的i o操...