模擬實現簡易版shell
首先介紹一下shell是什麼,Linux嚴格意義上說的是一個作業系統,我們稱之為核心(Kernel),但我們一般使用者不能直接使用kernel,而是通過Kernel的外殼程式,也就是所謂的shell,來與kernel溝通,從技術角度講,shell的最簡單定義:就是命令列直譯器。話不多說,讓我們來實現一個簡易版的shell.
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<sys/types.h>
int main()
{while(1){
printf("[myshell@my hostname test]# ");
fflush(stdout);
char buf[1024];
ssize_t s=read(0,buf,sizeof(buf)-1);
if(s>0)
{
buf[s-1]='\0';
//printf("%s\n",buf);
}
char* temp[32];
char * start=buf;
temp[0]=start;
int i=1;
while(*start)
{
if(*start==' ')
{
*start='\0';
start++;
temp[i]=start;
i++;
}
else{
start++;
}
}temp[i]=NULL;
pid_t id= fork();
if(id==0){
execvp(temp[0],temp);
exit(1);
}
else if(id>0)
{pid_t ret=0;
ret=waitpid(id,NULL,0);
}
else{
}
}
return 0;
}
這樣短短50行程式碼就能實現一個簡易版的shell啦。
相關文章
- 簡易版 vue實現Vue
- 實現一個簡易版WebpackWeb
- 來實現一個簡易版的 PromisePromise
- 支援向量機python實現(簡易版)Python
- 簡單實現.NET Hook與事件模擬Hook事件
- 簡易版的Spring框架之IOC簡單實現Spring框架
- react/vue中dom-diff簡易版實現ReactVue
- 音樂播放器的實現(簡易版)播放器
- Python實現簡易版選課系統Python
- 簡單的string類的模擬實現
- Spring 架構的簡單模擬實現Spring架構
- namedtuple簡易實現
- Java 語言實現簡易版掃碼登入Java
- 如何實現一個簡易版的 Spring - 如何實現 AOP(中)Spring
- 如何實現一個簡易版的 Spring - 如何實現 AOP(上)Spring
- 如何實現一個簡易版的 Spring - 如何實現 Setter 注入Spring
- javascript模擬實現私有屬性簡單介紹JavaScript
- promise的模擬實現Promise
- javascript模擬實現replaceAll()JavaScript
- 從 0 到 1 實現一款簡易版 WebpackWeb
- 基於 Mysql 實現一個簡易版搜尋引擎MySql
- 簡易版的 Spring 之如何實現 Constructor 注入SpringStruct
- 3行程式碼實現一個簡易版promise行程Promise
- 200 行程式碼實現簡易版 2048 遊戲行程遊戲
- 如何實現一個簡易版的 Spring - 如何實現 @Autowired 註解Spring
- 【Tomcat】Tomcat工作原理及簡單模擬實現Tomcat
- Proteus實現簡單51程式的設計與模擬
- js模擬實現名稱空間簡單介紹JS
- shell模擬“多執行緒”執行緒
- 如何實現一個簡易版的 Spring - 如何實現 AOP(終結篇)Spring
- 簡易實現一個expressExpress
- 簡易RPC框架實現RPC框架
- javascript模擬new的實現JavaScript
- JavaScript 模擬new的實現JavaScript
- 【Java】——模擬登入實現Java
- JavaScript模擬實現replaceAll方法JavaScript
- 用C語言實現簡易的shell程式,支援多重管道及重定向C語言
- Vue原始碼分析之實現一個簡易版的VueVue原始碼