自己動手程式設計實現乙個shell

2021-08-21 17:26:26 字數 986 閱讀 7208

這是本部落格的第乙個文章**。主要介紹如何用 c 語言基於linux系統來實現乙個簡單shell,diy 乙個shell。通過自己程式設計實現乙個linux下的 shell,可以使得個人對程序的概念、程序的通訊和作業系統的執行的理解更加的深刻。還會大大增加個人學習的成就感,提供學習興趣。

這乙個文章**被命名為stupidshell

本**會首先從linux下的 shell 的實現思想上來解讀shell的工作原理和一些必要的知識要點,然後從完整的**實現來解讀具體的工作原理。

這是 stupidshell **本章裡的第一篇文章,主要介紹什麼是 shell 和 shell 的基本**架構。

shell 的中文翻譯為「外殼」,它的定義就是提供介面給使用者與作業系統核心互動的軟體。是 linux 系統下,可以大大提高生產效率的工具。類似於 windows 下的命令提示符。

簡單來說就是乙個可以分析並執行使用者所輸入的命令的軟體。

shell 的工作流程應該是這樣的:

1、列印命令提示符$或者#;

2、讀取並分析命令;

3、執行命令;

4、執行完命令後,重複 1-3;

是不是很簡單?看起來輕而易舉,三兩行**就可以實現了是不是?

while(true)

上面的**是不是就已經實現上述的 shell 的 3 個工作流程?雖然,它只能執行乙個命令,看起來非常 stupid;

但是,它已經把 shell 的三個關鍵步驟的思想體現在裡面了。

當然這個小東西還不配叫做 shell。因為 shell 執行的命令不僅僅包括內建命令(像以上**段所實現的命令),還包括外部命令。

欲知何為內建命令和外部命令,且聽下回分解。

diy shell 之——內建命令與外部命令(2)

自己動手實現乙個MVVM庫

我們知道的,常見的資料繫結的實現方法 1 資料劫持 vue 通過object.defineproperty 去劫持資料每個屬性對應的getter和setter 2 髒值檢測 angular 通過特定事件比如input,change,xhr請求等進行髒值檢測。3 發布 訂閱模式 backbone 通過...

envoy實現 自己動手實現乙個envoy限流器

envoy ratelimit envoy 可以繼承乙個全域性grpc ratelimit 服務,稱之為為rate limit service,go control plane 是乙個官方實現的golang 庫github.com envoyproxy go control plane go con...

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

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