類型 | 緣由 | 異步/同步 | 返回行爲 |
---|---|---|---|
中斷 | 來自I/O設備的信號 | 異步 | 老是返回到下一條指令 |
陷阱 | 有意的異常 | 同步 | 老是返回到下一條指令 |
故障 | 潛在可恢復的錯誤 | 同步 | 可能返回到當前指令 |
終止 | 不可恢復的錯誤 | 同步 | 不會返回 |
每個Linux文件都有一個類型來代表他在系統中的角色html
1.普通文件包含任意數據。應用程序經常要區分文本文件和二進制文件,文本文件是隻含有ASCII或Unicode字符的普通文件;二進制文件是全部其餘的文件。對內核而言,文本文件和二進制文件沒有區別。關於exec()函數
fork函數是用於建立一個子進程,該子進程幾乎是父進程的副本,而有時咱們但願子進程去執行另外的程序,exec函數族就提供了一個在進程中啓動另外一個程序執行的方法。它能夠根據指定的文件名或目錄名找到可執行文件,並用它來取代原調用進程的數據段、代碼段和堆棧段,在執行完以後,原調用進程的內容除了進程號外,其餘所有被新程序的內容替換了。另外,這裏的可執行文件既能夠是二進制文件,也能夠是Linux下任何可執行腳本文件。
在Linux中並無exec函數,而是有6個以exec開頭的函數族,下表列舉了exec函數族的6個成員函數的語法。node
所需頭文件 | #include <unistd.h> |
---|---|
函數說明 | 執行文件 |
函數原型 | int execl(const char path, const char arg, ...) |
函數原型 | int execv(const char path, char const argv[]) |
函數原型 | int execle(const char path, const char arg, ..., char *const envp[]) |
函數原型 | int execve(const char path, char const argv[], char *const envp[]) |
函數原型 | int execlp(const char file, const char arg, ...) |
函數原型 | int execvp(const char file, char const argv[]) |
函數返回值 | 成功:函數不會返回 |
函數返回值 | 出錯:返回-1,失敗緣由記錄在error中 |
要記住這六個函數之間的區別,就要搞清楚 「l」 、「v」、「p」、「e」表明的含義git
「l」表示參數以列表的形式表示; 「v」表示參數以數組的形式表示; 「p」表示在PATH中搜索執行文件; 「e」表示可附加環境參數。 execlp、execvp這兩個函數第一個形參是名爲file表示能夠只列出文件名就能夠了,不用指出它的路徑。
阻塞(若是其全部子進程都還在運行)。數組
帶回子進程的終止狀態當即返回(若是已有一個子進程終止,正等待父進程取其終止狀態)安全
出錯當即返回(若是它沒有任何子進程)。網絡
所需頭文件 | #include <sys/types.h> #include <sys/wait.h> |
---|---|
函數說明 | wait()會暫時中止目前進程的執行,直到有信號來到或子進程結束。若是在調用wait()時子進程已經結束,則wait()會當即返回子進程結束狀態值。子進程的結束狀態值會由參數status 返回,而子進程的進程識別碼也會一塊兒返回。若是不在乎結束狀態值,則status能夠設成NULL |
函數原型 | pid_t wait (int *status) |
函數傳入值 | 這裏的status 是一個整型指針,是該子進程退出時的狀態:1.status 若爲空,則表明不記錄子進程結束狀態。2.status 若不爲空,則由status記錄子進程的結束狀態值。 |
函數返回值 | 成功返回子進程識別碼(PID) |
函數返回值 | 出錯-1,失敗緣由存於errno中 |
所需頭文件 | #include <sys/types.h> #include <sys/wait.h> |
---|---|
函數說明 | waitpid()會暫時中止目前進程的執行,直到有信號來到或子進程結束。若是在調用waitpid()子進程已經結束,則waitpid()會當即返回子進程結束狀態值。子進程的結束狀態值會由參數status返回,而子進程的進程識別碼也會一塊兒返回。若是不在乎結束狀態值,則參數status能夠設成NULL。參數pid爲欲等待的子進程識別碼 |
函數原型 | pid_t waitpid(pid_t pid,int * status,int options) |
函數傳入值 | pid<-1:等待進程組識別碼爲pid絕對值的任何子進程 |
函數傳入值 | pid=-1: 等待任何子進程,至關於wait() |
row 1 col 1 | pid=0:等待進程組識別碼與目前進程相同的任何子進程 |
row 2 col 1 | pid=>0:等待任何子進程識別碼爲pid的子進程 |
函數傳入值 | 參數options能夠爲0 或下面的OR 組合 |
函數傳入值 | 參數options,WNOHANG:若是沒有任何已經結束的子進程則立刻返回,不予以等待。此時返回值爲0 |
函數傳入值 | 參數options,WUNTRACED:若是子進程進入暫停執行狀況則立刻返回,但結束狀態不予以理會 |
函數傳出值 | 同wait函數 |
函數返回值 | 成功返回子進程識別碼(PID) |
函數返回值 | 成功使用選項WNOHANG且沒有子進程退出返回0 |
函數返回值 | 出錯-1,失敗緣由存於errno中 |
exit函數,
exit() 結束當前進程/當前程序/,在整個程序中,只要調用 exit ,就結束return()是當前函數返回,固然若是是在主函數main,天然也就結束當前進程了,若是不是,那就是退回上一層調用。在多個進程時.若是有時要檢測上進程是否正常退出的就要用到上個進程的返回值..數據結構
int open(char* filename,int flags,mode_t mode)
opne函數將filename轉換爲一個文件描述符,而且返回描述符數字。返回的描述符老是在進程中當前沒有打開的最小描述符。flags參數指明瞭進程打算如何訪問這個文件:
1.O_RDONLY:只讀.
2.O_WRONLY:只寫
3.O_RDWR:可讀可寫
4.O_CREAT:若是文件不存在,就建立他的一個截斷的空文件
5.O_TRUNC:若是文件已經存在,就截斷它。
6.O_APPEND:在每次寫操做前,設置文件位置到文件的結尾處。併發
ssize_t read(int fd,void *buf,size_t n); ssize_t write(int fd,const void *buf,size_t n);
關於read函數異步
返回值:成功則返回讀的字節數,EOF返回0,出錯返回-1。函數
fd:文件描述符
buf:存儲器位置
n:最多從當前文件位置拷貝n個字節到存儲器位置buf
關於write函數
返回值:成功則返回寫的字節數,出錯返回-1。
fd:文件描述符
buf:存儲器位置
n:最多從存儲器位置buf拷貝n個字節到當前文件位置
共享文件,內核用三個相關的數據結構來表示打開的文件:
1.描述符表:每一個進程都有獨立的描述符表,由進程打開的文件描述符來索引,每一個打開的描述符表項指向文件表中的一個表項。
2.文件表:全部進程共享,表項組成包括當前文件位置、引用計數、一個指向v-node表中對應表項的指針。引用計數爲0時,內核會刪除這個文件表表項。
3.v-node表:全部進程共享,每一個表項包含stat結構中的大多數信息。
書p603rio_read函數中,erro!=EINTR我感受應該是erro==EINTR
[20155317](http://www.cnblogs.com/wxwddp/p/7671075.html) ![image](http://note.youdao.com/favicon.ico) - 結對學習內容 - XXXX - XXXX - ...
xxx
xxx
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 200/200 | 2/2 | 20/20 | |
第二週 | 300/500 | 2/4 | 18/38 | |
第三週 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
計劃學習時間:XX小時
實際學習時間:XX小時
改進狀況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)