模擬實現簡易版shell

superwangxinrui發表於2018-03-14
  首先介紹一下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啦。

相關文章