linux下自行實現的簡單shell程式

2021-10-03 17:57:12 字數 1071 閱讀 4151

學過exec系列函式後,我嘗試自行實現乙個shell程式,

先上**

#include

#include

#include

#include

#include

#include

#include

#include

#define num 32

;using namespace std;

int main()

;for(;

;)pid_t id=0;

if(id==0)

else

}return0;

}

大致思路:

要想寫出乙個和系統類似的shell,我們需要:

寫入命令列

解析命令列

建立子程序

替換子程序

父程序等待子程序退出

寫入命令列

首先我們需要寫乙個格式如作業系統核心的shell , [***@host_local yyy]# ,來提示我們接下來要輸出命令,列印出來,下來就是要寫入操作了,那麼這個操作是由使用者自行寫入,也就是要從鍵盤上寫入,我們使用了函式fgets(),這時候注意,使用者在鍵盤輸入是,最後是以回車提交,而如果fgets()會把回車一併讀取上來,所以我們手動把buff陣列的最後乙個元素設定為0才行。

解析命令列

要解析我們剛剛寫入的命令,就要用到strtok函式,以空格為分隔符將剛剛寫入的buff陣列解析到新陣列ar**[ ]中,迴圈寫入,需要注意的是,strtok函式會把分割前的字串破壞掉,即每次分割後,原來的字串就會少掉一部分,完整性會被破壞。

建立子程序

這個程式的主要目的,就是建立乙個子程序,讓這個子程序替換成我們寫入的命令列,也是體現整個**核心思想的**段,用到了execv()函式,此時傳入的第乙個引數,就是剛剛收到命令列解析的ar**[ ]陣列的首元素,第二個引數就是ar**這個陣列。

父程序等待子程序退出

最後父程序等待子程序退出,

linux下實現檔案轉移的sh指令碼

實現目標 cn目錄下有若干資料夾,並且每個資料夾中有一系列以cn開頭的子資料夾,現要求將cn開頭的這些子資料夾實現按資料夾名進行組織存放,例如將 home cn temp cn20081478023的資料夾存放到 home cn 2008 1478 cn20081478023,則shell命令如下 ...

用C語言實現乙個簡單的Linux殼層(Shell)

期末考試考完,進入聖誕假期,終於騰出手寫這篇文章了。這是我們os課的第乙份作業,要求實現乙個簡單的linux shell,用c寫出乙個類似terminal的東西。大致要求 可以迴圈接收command,根據內容實現相應動作,實現幾個常見command即可。作業目的是熟悉幾個知識點 linux的pare...

Linux系統下自建CA實現https訪問

1.安裝apache2 用於充當伺服器的角色 需要在配置檔案apache2.conf最後加入下面兩句 servername localhost directoryindex index.html index.htm index.php 其中 servername localhost是為了防止最後開啟...