模擬實現簡易版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
- 支援向量機python實現(簡易版)Python
- 簡易版的Spring框架之IOC簡單實現Spring框架
- 來實現一個簡易版的 PromisePromise
- Python實現簡易版選課系統Python
- 簡單實現.NET Hook與事件模擬Hook事件
- Python技法:用re模組實現簡易tokenizerPython
- react/vue中dom-diff簡易版實現ReactVue
- 簡易版的 Spring 之如何實現 Constructor 注入SpringStruct
- 【Tomcat】Tomcat工作原理及簡單模擬實現Tomcat
- 如何實現一個簡易版的 Spring - 如何實現 AOP(中)Spring
- 如何實現一個簡易版的 Spring - 如何實現 AOP(上)Spring
- 如何實現一個簡易版的 Spring - 如何實現 Setter 注入Spring
- namedtuple簡易實現
- [Linux]簡單的shell實現Linux
- Java 語言實現簡易版掃碼登入Java
- 如何實現一個簡易版的 Spring - 如何實現 @Autowired 註解Spring
- 如何模擬實現node中的Events模組(通俗易懂版)
- 如何實現一個簡易版的 Spring - 如何實現 AOP(終結篇)Spring
- promise的模擬實現Promise
- 用C語言實現簡易的shell程式,支援多重管道及重定向C語言
- 3行程式碼實現一個簡易版promise行程Promise
- 從 0 到 1 實現一款簡易版 WebpackWeb
- 基於 Mysql 實現一個簡易版搜尋引擎MySql
- 手寫Spring MVC框架(一) 實現簡易版mvc框架SpringMVC框架
- Proteus實現簡單51程式的設計與模擬
- 簡易實現一個expressExpress
- Go 實現簡易 RPC 框架GoRPC框架
- 利用 trait 簡易 Facade 實現AI
- 基於AOP和Redis實現的簡易版分散式鎖Redis分散式
- Vue原始碼分析之實現一個簡易版的VueVue原始碼
- 從封裝函式到實現簡易版自用jQuery (二)封裝函式jQuery
- DI 原理解析 並實現一個簡易版 DI 容器
- 模擬實現apply/call/bindAPP
- javascript模擬new的實現JavaScript
- JavaScript 模擬new的實現JavaScript
- JavaScript模擬實現replaceAll方法JavaScript