自主shell的實現與封裝fork wait

2021-08-20 02:41:34 字數 1573 閱讀 2112

在電腦科學中,shell俗稱殼(用來區別於核),是指「提供使用者使用介面」的軟體(命令解析器)。它接收使用者命令,然後呼叫相應的應用程式。

同時它又是一種程式語言。作為命令語言,它互動式解釋和執行使用者輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程式語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。

shell 的工作步驟:

(1)獲取命令列

(2)解析命令列

(3)建立乙個子程序 (fork)

(4)替換子程序 (exec)

(5)父程序等待子程序退出 (wait )

shell的實現

#include

#include

#include

#include

#include

#include

int argc = 0;

char* argv[8] = {};

//解析並獲取命令列

void do_parse(char* buf)

else

if(isspace(buf[i]))

}}//建立,替換,**子程序

void do_shell()

else

if(pid > 0)

else

//對子程序進行替換

}int main()

; while(1)

}

執行結果

注釋: execvp

定義函式:

int execvp(const char file ,char const argv );

函式說明:

execvp()會從path 環境變數所指的目錄中查詢符合引數file 的檔名,找到後便執行該檔案,然後將第二個引數argv傳給該欲執行的檔案。

返回值:

如果執行成功則函式不會返回,執行失敗則直接返回-1,失敗原因存於errno中。

剛剛我們了解了一下execvp這個函式,下面我們再來玩一把

#include

#include

#include

#include

int process_create(int (*func)(),const

char* file, char*argv)

else

if( pid == 0)

else

return0;}

int main()

; char* argv2 = ;

process_create(execvp,*argv1,argv2);

return

0;}

執行結果:

自主實現簡單shell的編寫

用fork建立子程序後執行的是父程序相同的程式,但實際期望中,我們希望子程序應該執行和父程序不同的 所以此時,子程序需要呼叫exec函式以執行另乙個程式,當程序呼叫一種exec函式時,該程序的使用者空間 和資料完全被新程式替換,並從新的程式的啟動例程開始執行。呼叫exec並不建立新程序,所以呼叫ex...

程序控制,自主實現shell

撤銷 ctrl command z 重做 ctrl command y 加粗 ctrl command b 斜體 ctrl command i 無序列表 ctrl command shift u 有序列表 ctrl command shift o 檢查列表 ctrl command shift c ...

對自主標定的實現

重新整理的比較清楚的opencv框架 include stdafx.h include include include using namespace std using namespace cv int tmain int argc,tchar ar else if contours.size 0...