模拟实现一个简单shell

模拟实现一个简单shell


    程序涉及的关键函数有fgets(),strtok(),execvp(),waitpid(),不知道怎么使用可自行查找使用方法,fgets()函数用于把写入的命令输入到字符数组中,strtok()函数则是把fgets()收集到的字符根据空白格分割到不同的字符数组中,execvp()函数,进行 进程替换,此时子进程不和父进程共用代码,也不新创建新进程,子进程重新在内存中写入execvp()函数要执行的代码,代码结束子进程结束,waitpid()函数用于父进程的进程等待。具体使用代码如下:

    1 #include <stdio.h>
    2 #include <stdlib.h>
    3 #include <string.h>
    4 #include <unistd.h>
    5 #define LEN 1024
    6 #define NUM 32
    7 
    8 int main()
    9 {
   10   char tem[LEN];
   11   char* argv[NUM];
   12   while(1)
   13   {
   14     printf("[root@vm-0-13-centos]# ");
   15     fgets(tem,LEN,stdin);
   16     tem[strlen(tem) - 1] = '\0';
   17     argv[0] = strtok(tem," ");
   18 
   19     int i = 1;                                                                                       
   20     while(argv[i] = strtok(NULL," "))
   21     {
   22       i++;
   23     }
   24     pid_t id = fork();
   25     if(id == 0)
   26     {
   27       execvp(argv[0],argv);
   28       exit(11);
   29     }
   30     else
   31     {
   32       waitpid(id,NULL,0);
   33     }
   34   }
   35   return 0;
   36 }     

    运行程序,并输入ls -a -i -l ,输出结果如下:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

滋巴糯米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值