/*20190528*/
/*APUE*/
/*第一章--UNIX基礎知識*/
1.Unix操作系統體系結構
內核--》系統調用--》shell/公用函數庫--》應用程序
2.登錄口令
1. 口令文件:/etc/passwd;
2. 7個字段:登錄名:加密口令:數字用戶ID:數字組ID:註釋字段:起始目錄:shell程序(系統決定爲用戶執行哪一個shell
3.Shell
- 命令行解釋器:讀取用戶輸入,執行命令
2. 常用shell:bshell, cshell, kshell
4.文件和目錄
- 文件名推薦在“字母”,“數字”,“.”,“-”,“_”範圍內
- 絕對路徑:/開頭;相對路徑名:相對於當前目錄的文件
5.輸入和輸出
- 文件描述符:小的非負整數,內核用以標識一個特定進程正在訪問的文件;讀寫文件時都可以使用
- 新程序文件描述符:標註輸入,標準輸出,標準錯誤,默認鏈向終端;可以重定向到某個文件(ls > file.list)
- 不帶緩衝的I/O:read(), write(), open(), lseek(), close()都使用文件描述符
- 標準I/O:爲不帶緩衝的I/O提供了一個帶緩衝的接口,無需考慮最佳緩衝區大小;簡化了對輸入行的處理;例如printf(), fgets()...定義在#include<stdio.h>中
- 標準I/O常量stdin, stdout;EOF也定義在#include<stdio.h>中
6.程序和進程
- 程序:存儲在磁盤上某個目錄的可執行文件;內核使用exec()函數將程序讀入內存並執行
- 進程:程序的執行實例;UNIX系統確保每一個進程都有一個唯一的數字標識符(進程ID,非負整數)
- 進程控制:fork(), exec(), waitpid()
6.2線程
- 所有線程共享同一地址空間,文件描述符,棧,進程相關屬性(訪問同一存儲區)
- 需採取同步措施
- 用ID標識,旨在所屬進程內有效;可用線程ID引用該線程
7.出錯處理
- #include<errno.h>中定義了errno及可以賦予的各常量
- 不出錯其值不會被例程清除;任何函數都不會將errno置爲0
- 打印出錯信息函數strerror()【#include<string.h>】, perror()[#include<stdio.h>]
- 出錯恢復:非致命性錯誤可以恢復
8.用戶標識
(1)用戶ID
(2)用戶組ID
9.信號
(1)通知進程發生了某種情況
(2)處理方式:忽略,默認,信號處理函數
10.時間值
(1)日曆時間
(2)進程時間(CPU時間):始終時間,用戶CPU時間,系統CPU時間
11.系統調用和庫函數
(1)系統調用:直接進入內核的入口點;UNIX爲每個系統調用在標準c庫中設置一個具有同樣名字的函數
(2)庫函數可以被替換,系統調用不能
(3)系統調用提供最小接口,庫函數提供比較複雜的功能