Linux 製作簡易shell

2021-10-22 20:20:10 字數 1604 閱讀 5758

考慮下面這個與shell典型的互動:

用下圖的時間軸來表示事件的發生次序。其中時間從左向右。shell由標識為sh的方塊代表,它隨著時間的流逝從左向右移動。shell從使用者讀入字串"ls"。shell建立乙個新的程序,然後在那個程序中執行ls程式並等待那個程序結束。

然後shell讀取新的一行輸入,建立乙個新的程序,在這個程序中執行程式並等待這個程序結束。所以要寫乙個shell,需要迴圈以下過程:

1.列印命令提示符[使用者名稱@主機名 當前目錄] 提示符(對於普通使用者$,對於root使用者顯示#)2. 解析命令列

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

4. 替換子程序(execvp)

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

根據這些思路,和我們前面的學的技術,就可以自己來實現乙個shell了。

#include

#include

#include

#include

#define size 256

#define num 16

intmain()

++i;

}while(1

);//建立子程序

系統呼叫獲取使用者名稱 、主機名、和當前目錄char *fgets(char *s,int size,file * stream);

獲得乙個字串,放到緩衝區;這個緩衝區有多大;從哪種流方式獲得

①fgets()函式

cmd[strlen(cmd)-1] = '\0';這句,對於你的命令列來說,你按下回車鍵作為了結束,但是你的命令行將他識別為了』\n』,所以你的cmd中儲存的字串最終是『\n\0』結尾的,所以這裡你在呼叫的時候就需要用ls 『- -』(兩個』-『來執行命令),所以為了避免這樣,就把最後乙個』\n』的地方替換為』\0』就好了

③strtok字串函式

字串詳解鏈結: link.

④continue:再迴圈體中會跳過剩下的語句,而直接回到最初重新進行程式的判斷,break是直接跳出迴圈體,不再執行

自己動手製作乙個簡易的shell

本人最近在看 unix環境高階編層 其上面的程式清單1 5的程式介紹了如何製作乙個shell,而後本人又做了一點改進,改進的地方如下 1.為了方便檢視,刪除了原來的err sys 函式和其自定義的 apue.h 這個標頭檔案!2.增加了對於命令選項處理的功能,但是不是很強大,目前只能處理單個引數!本...

python簡易爬蟲製作

編譯環境 pycharm 4.5.3 python版本 3.5.1 以knewone為例 frombs4importbeautifulsoup importrequests importtime url web data requests.get url 利用requests訪問網頁 soup be...

C 簡易外掛程式製作

外掛程式修改器簡單介紹 遊戲外掛程式分為很多種型別,例如本地客戶端的記憶體修改 遠端伺服器的封包破解。一般的網遊由於伺服器的機能限制,並不會將遊戲產生的所有資料 計算都提供給伺服器來承擔。經常的,伺服器只會將玩家人物的屬性 血量 加點 金錢 裝備等重要資訊儲存在伺服器本地,計算結果和資料傳遞則是通過...