Bootstrap

Linux 自己实现一个简单的bash

这个程序主要用到的知识点是 exec + fork

主要思路
1.键盘输入存放在buff[] 中
2.使用strtok函数将 buff 中的数据以空格为分割符将 buff 分割存放于 myargv 中
3.判断 myargv[0] 是不是为空或者 exit;为空不做任何操作,exit结束进程
4.myargv[0] 不为空或者 exit , 使用 fork 创建出一个子进程,使用 exec 替换进程执行输入的操作

代码展示:

   #include<stdio.h>
   #include<stdlib.h>
   #include<assert.h>
   #include<unistd.h>
   #include<string.h>
   
   
   int main(int argc, char* argv[], char* envp[])
   {
      while( 1 )
      {
          printf("stu@stu-pc :~/c210/pratice$ ");
          fflush(stdout);//强制刷新缓冲区
  
          char buff[128] = {0};//存放命令,ls,ps -f
          fgets(buff,128,stdin);
  
          buff[strlen(buff) - 1] = 0;//"ls\n" -> "ls"
  
          char* myargv[10] = {0};
          char* s = strtok(buff," ");//分割字符串
          int i = 0;
          while(s != NULL)
          {
              myargv[i++] = s;
              s = strtok(NULL," ");
          }
  
          char* cmd = myargv[0];
          if(cmd == NULL)
          {
              continue;
          }
  
          if( strcmp(cmd,"exit") == 0)
          {
              exit(0);
          }
  
          if(buff[0] == 0)
          {
              continue;
          }
  
          pid_t pid = fork();
          if(pid == -1)
          {
              continue;
          }
          if(pid == 0)
          {
             execvp(cmd,myargv);
             perror("execlp error\n");
             exit(0);
         }
 
         wait(NULL);
 
     }
 }

运行程序:
在这里插入图片描述

;