实现myshell--简易版

实现步骤:

1.获取命令行

2.解析命令行

3.创建一个子进程

4.替换子进程

5.父进程等待回收子进程

实现:

 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/wait.h>
 #include <unistd.h>
 #include <string.h>
 #include <ctype.h>
 
 void do_shell(int argc,char * argv[]){
        pid_t pid =fork();
        if(pid == -1) perror("fork"),exit(1);
        if(pid==0){ //子进程负责替换进程
        if(execvp(argv[0],argv)==-1)
                perror("execvp"),exit(1);
        }
        else if(pid > 0){
        wait(NULL);  //父进程等待回收子进程
        }
 }
 
 void do_parse(char *buf){
 int i=0;
 int argc=0;
 char * argv[8];
 int status=0;
 
  for(i;buf[i];i++){
        if(!isspace(buf[i])&&status==0){
                argv[argc++]=&buf[i];
                status=1;
                }
        else if(isspace(buf[i])){
                status=0;
                buf[i]=0;
 }
 }
 argv[argc]=NULL;
 do_shell(argc,argv);
 }
 
 
 int main(void){
 char buf[1024]={};
 while(1){
 memset(buf,0x00,sizeof(buf));
 printf("[adi@localhost] >");
 scanf("%[^\n]%*c",buf); //获取命令行 
 
 if(strncmp(buf,"exit",4)==0)
        exit(0);
 do_parse(buf);//解析命令行函数 
 }
}

运行结果:



此款shell为简易款,只能实现一些简单的查看命令,仍有许多要改进的地方。。。

缺点:

1)不能使用删除键更新书写错误

2)内部命令无法实现

猜你喜欢

转载自blog.csdn.net/warrior_harlan/article/details/80576277