Linux下模擬實現乙個微型shell

2021-08-29 12:22:05 字數 1159 閱讀 2909

首先我們先看一下shell的執行過程:

shell從使用者讀入字串"ls",並建立乙個新的程序,在那個程序中執行ls程式並等待那個程序結束。然後shell讀取新的一行輸入,建立乙個新的程序,在這個程序中執行程式並等待這個程序結束。

所以我們要寫乙個微型shell,需要迴圈以下過程:

獲取終端輸入。

解析輸入(按空格解析到乙個乙個的命令引數)。

建立乙個子程序,在子程序中進行程式替換,讓子程序執行命令。

等待子程序執行完畢,收屍,獲取退出狀態碼。

根據這個思路和我們之前學習到的知識,就可以自己實現乙個微型shell了。

來看**(使用linux作業系統實現):

#include#include#include#include#includeint argc;

char *argv[32];

int param_parse(char *buff)

ptr++;

} argv[argc++] = tmp;

argv[argc] = null;

return 0;

}int exec_cmd()

//父程序在這裡必須等待子程序退出,來看看子程序為什麼退出了,是不是出現了什麼錯誤。

//通過獲取狀態碼,並且轉換一下退出碼所對應的錯誤資訊進行列印。

int statu;

wait(&statu);

//判斷子程序是否**執行完畢退出

if (wifexited(statu))

return 0;

}int main()

; // %[^\n] 獲取資料直到遇到\n為止

// %*c 清空緩衝區,資料都不要了

scanf("%[^\n]%*c", buff);

printf("%s\n", buff);

param_parse(buff);

exec_cmd;

} return 0;

}

測試結果:

linux程式設計 模擬實現乙個執行緒池

實現乙個執行緒池需要構建三個類 執行緒任務類給定兩個介面,settask 負責把給的資料和方法傳進任務系統,start 負責將給定資料用給定方法來處理。安全佇列類,負責給執行緒池提供乙個能夠互斥訪問的安全佇列。執行緒池類提供三個介面,threadpool 建立指定數量的執行緒,taskpush 將任...

如何模擬實現乙個call apply bind函式

call模擬實現 首先我們實現繫結this功能。比如我們有乙個foo函式 function getname 還有乙個wechat物件 const wechat 我們希望實現 getname.call wechat fedaily以wechat和getname這個為例,這裡的this即getname,...

模擬實現Linux下命令 ls

首先我們對linux下ls命令已經非常熟悉了,我在這裡用c語言僅實現ls l及ls l 僅作練習使用 首先需要了解ls l命令都做了那些活動,那麼就需要研究以下 我們可以看到有七列主要內容,先來逐個分析 檔案的型別,此圖里所有檔案均為目錄,所以是d。許可權 本使用者許可權 本組使用者許可權 其他使用...