基于C语言实现MyShell

实现的功能

1.获取命令行

2.解析命令行
3.建立一个子进程
4.替换子进程
5.父进程等待子进程退出

代码如下:

  1 #include <unistd.h>
  2 #include <sys/wait.h>
  3 #include <stdio.h>
  4 #include <stdlib.h>
  5 #include <string.h>
  6 
  7 char *argv[8];
  8 int argc=0;
  9 
 10 void do_parse(char *buf)
 11 {
 12     int i;
 13     int status=0;
 14     for(argc=i=0;buf[i];i++)
 15     {
 16         if(!isspace(buf[i])&&status == 0)
 17         {
 18             argv[argc++]=buf+i;
 19             status=1;
 20         }
 21         else if(isspace(buf[i]))
 22         {
 23             status=0;
 24             buf[i]=0;
 25         }
 26     }
 27     argv[argc]=NULL;
 28 }
 29 
 30 void do_execute(void)
 31 {
 32     pid_t pid=fork();
 33     switch(pid)
 34     {
 35         case -1:
 36         perror("fork");
 37         exit(EXIT_FAILURE);
 38         break;
 39         case 0:
 40         execvp(argv[0],argv);
 41         perror("execvp");
 42         exit(EXIT_FAILURE);
 43         dafault:
 44         {
 45             int st;
 46             while(wait(&st)!=pid)
 47             ;
 48         }
 49     }
 50 }
 51 
 52 int main()
 53 {
 54     char buf[1024]={};
 55     while(1)
 56     {
 57         printf("myshell>");
 58         scanf("%[^\n]%*c",buf);
 59         do_parse(buf);
 60         do_execute();
 61     }
 62 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值