天天看點

第一章 UNIX基礎知識

  1. 核心的接口被稱為系統調用;
  2. 公用函數庫建構在系統調用接口上,應用程式既可以使用公用函數庫,也可以使用系統調用;
  3. shell是一個特殊的應用程式,為運作其他應用程式提供了一個接口;
    第一章 UNIX基礎知識
  4. 作業系統 = 核心 + 一些其他軟體(系統實用程式、應用程式、shell 和 公用函數);

    1) 實用程式:是針對作業系統的不足而 編制的程式,它幫助使用者進一步管理好自己的計 算機;

    2) shell:計算機用來解釋你輸入的指令然後決定進行何種處理的程式(也可以處理檔案);

  5. 使用者名和密碼的資訊都可以在 /etc/passwd 和 /etc/shadow 中找到;
  6. UNIX系統中常見的shell:

    1) Bourne shell

    2) Bourne-again shell

    3) C shell

    4) Kom shell

    5) TENEX shell

  7. 不同的Linux系統使用不同的預設shell;
  8. 目錄 是一個包含目錄項的檔案,目錄項是對該目錄相關資訊的說明;
  9. 在Linux中,“/” 和 “ ”不能出現在檔案名中,原因是“/”用來分隔構成路徑名的檔案名,“ ”用來終止一個路徑名;
  10. 建立新目錄時會自動建立兩個檔案名:“.” 和 “…”,“.” 指向目前目錄,“…” 指向父目錄;
  11. 圖1-3相關注釋:
    第一章 UNIX基礎知識

    另附👉struct dirent 和 DIR結構體 詳解

    另外,如果自己實作書中代碼,需要安裝 apue.h 庫,網上可以搜到教程,這裡不再贅述。推薦使用第三版,相對來說需要重新配置的地方比較少。

  12. 每個程序都有一個工作目錄,程序可以用 chdir 函數更改其工作目錄;

    注:chdir 函數的參數是目前工作目錄,傳回值為 0 則說明修改成功。

  13. 檔案描述符通常是一個小的非負整數,也就是核心打開或建立一個檔案時的傳回值,我們通過它來對該檔案進行讀寫操作;
  14. 通常,當運作一個新程式時,shell為其打開3個檔案描述符 ---- 标準輸入、标準輸出和标準錯誤;
  15. 函數 open、read、write、lseek、close 提供了不帶緩沖的 I/O,它們都使用檔案描述符;
  16. 圖1-4相關注釋:
    第一章 UNIX基礎知識
  17. 标準 I/O,也就是類似 printf 之類的函數,都提供了緩沖區,我們使用時無需考慮緩沖區大小的問題;
  18. 核心使用 exec 函數将程式讀入記憶體并執行;
  19. 程序ID總是一個非負整數;
  20. 使用 getpid() 可以獲得目前程序的程序 ID;
  21. 圖1-7相關注釋:
    第一章 UNIX基礎知識
  22. 程序控制的主要函數:

    1) fork:建立一個新程序,傳回值為子程序的程序ID;

    2) exec:exec()族函數用一個新的程序映像替換目前程序映像;

    3) waitpid:暫時停止目前程序的執行,直到有信号來到或子程序結束;

  23. 一個程序内的線程共享這個程序的資源,是以多線程程序需要采取同步措施(比如鎖)避免不一緻性(比如同時修改資料);
  24. 線程 ID 隻在它所屬的程序中有意義;
  25. errno 定義在 <errno.h> 中;
  26. 多線程情況下,每個線程都有屬于它的局部 errno,以避免互相幹擾;
  27. errno 的使用規則:

    1) 如果沒有出錯,其值不會被例程(例程是某個系統對外提供的功能接口或服務的集合,比如作業系統的API、服務等)清除,是以,僅當函數的傳回值指明出錯時,才檢驗其值;

    2) 任何函數都不會将 errno 的值設為 0,而且在 <errno.h> 中定義的所有常量都不為0;

  28. C 标準下的兩個用于列印出錯資訊的函數:

    1) strerror :将 errno 值映射為一個出錯消息字元串,并且傳回這個字元串的指針;

    2) perror :基于 errno 的目前值,在标準錯誤上産生一條出錯消息,然後傳回;

  29. 圖1-8 相關注釋:
    第一章 UNIX基礎知識
  30. 兩種出錯:

    1) 緻命性的:在使用者螢幕上列印出一條出錯消息或将一條出錯消息寫入日志檔案,然後退出;

    2)非緻命性的:有時可以較為妥善的處理,大多非緻命出錯是暫時的(如資源短缺)。對于資源相關的非緻命性出錯的典型恢複操作是延遲一段時間,然後重試;

  31. root 使用者的使用者 ID 為 0;
  32. 附屬組:部分新的 unix 系統版本允許一個使用者屬于另外一些組;
  33. 終端鍵盤上有兩種産生信号中斷目前運作的程序的方法:

    1) 中斷鍵:Delete 或 Ctrl+C

    2) 退出鍵:Ctrl+\

    另一種産生信号的方式是調用 kill 函數,從一個程序向另一個程序發送信号;

  34. 圖1-10新增代碼相關注釋:
    第一章 UNIX基礎知識
  35. 時間值:

    1) 月曆時間:time_t

    2) 程序時間:clock_t

  36. 程序時間值:

    1) 時鐘時間:程序運作的時間總量;

    2) 使用者CPU時間:執行使用者指令所用的時間量;

    3) 系統CPU時間:為該程序執行核心程式所經曆的時間;

  37. 系統調用:由作業系統提供的向核心請求服務的程式;
  38. 庫函數雖然可能會調用一個或多個核心的系統調用,但它們并不是核心的入口點;
  39. 如果希望的話,我們可以替換庫函數,但是系統調用通常是不可以被替換的;
  40. 應用程式既可以調用系統調用也可以調用庫函數,很多庫函數則會調用系統調用;
  41. 系統調用通常提供一種最小接口,而庫函數通常提供比較複雜的功能。

課後習題百度文庫有參考答案。

繼續閱讀