【qianlong88的APUE讀書筆記】第一章:uinx基礎知識

在做本章的筆記之前,先分享一個關於man命令的知識,對今後的學習有很大的幫助。

Linux下的在線手冊(MAN)的章節分類:

/usr/share/man/ - Linux man pages
1、Standard commands (標準命令)
2、System calls    (系統調用)
3、Library functions    (庫函數)
4、Special devices    (設備說明)
5、File formats    (文件格式)
6、Games and toys    (遊戲和娛樂)
7、Miscellaneous    (雜項)
8、Administrative Commands    (管理員命令)

 

1.1 引言

所有操作系統都需要向他們運行的程序提供各種服務,包括:執行新程序、打開文件、讀文件、分配存儲區以及獲取當前時間等,本書即集中闡述了unix操作系統各種版本所提供的服務。

第一章是對全書的快速瀏覽,涉及到了本書要講的大部分模塊,後面的章節會有具體的講解。

1.2 unix體系結構

操作系統控制計算機硬件資源,提供程序運行環境。下圖描繪了unix操作系統的體系結構。狹義的操作系統即爲內核,廣義的操作系統包含了其他軟件,如實用程序、shell及公用函數庫。

內核的接口被稱爲系統調用。公共函數庫構建在系統調用接口之上,應用軟件既可使用公共庫函數,也可使用系統調用。

Shell是一種特殊的應用程序,它爲運行其他應用程序提供了一個接口。

1.3 登錄

1.登錄名:/etc/passwd文件中的字段

2.shell:命令行解釋器,用戶登錄後的默認shell由passwd文件指定。

常見的shell:Bourne shell/Bourne-again shell/C shell/Korn shell/TENEX C shell

Bourne shell:最常見的shell,其控制流結構類似於Algol 68;

1.4 文件和目錄

Unix的文件系統是目錄和文件組成的層次結構,起點爲跟(/)。

目錄是包含很多目錄項的文件,目錄項包括文件名、文件信息。

書中有一個仿ls程序,比較簡單,就不寫了。

另外說明本書源代碼的編譯方式,其實不難,如果有人需要源碼和編譯方法,可以找我。

1.5 輸入輸出

文件描述符:小的非負整數,內核用它標識一個特定進程正在訪問的文件。

標準輸入、標準輸出、標準出錯:特殊的文件,描述符分別爲0、1、2

不用緩衝的I/O:系統調用,open,read,write,lseek,close。標準輸入、輸出均可重定向到其他文件。

標準I/O:提供了一種對不用緩衝I/O函數的帶緩衝的接口。使用標準I/O函數可以無需擔心如何選取最佳的緩衝區大小。

1.6 程序和進程

程序:磁盤上的可執行文件。使用6個exec函數中的一個由內核將程序讀入存儲器,並使其執行。

進程:程序的執行實例,由pid標識。

進程控制函數:fork/exec/waitpid

Fork函數創建一個新進程,並返回兩次,一次返回給父進程,一次返回子進程。

1.7 出錯處理

           errno,在<errno.h>中定義,uinx系統手冊的第二部分的intro列出了所有的這些常量;linux中,出錯常量在errno(3)手冊頁中列出。

          支持多線程的環境中,每個線程都有自己局部的errno,以避免干擾另一個線程。

        兩條規則:不出錯,不會清除errno;errno不爲0。            

//將errno映射爲出錯信息字符串

Char *strerror(int errnum);

//基於當前errno值,在標準出錯上產生一條出消息。

Void perror(const char *msg);


1.8 用戶標識

用戶ID、組ID、附加組ID

1.9 信號

信號:通知進程已發生某種情況的一種技術。

Signal函數

sighandler_t signal(int signum, sighandler_t handler);

1.10 時間值

日曆時間:自1970年1月1日00:00:00以來國際標準時間所經歷的秒數累計值。Time_t保存該值

進程時間:即CPU時間

Time命令

1.11 系統調用和庫函數

Linux不同版本提供240~260個系統調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章