【Linux】minishell的实现

shell是什么?shell可以理解为操作系统内核与用户之间的桥梁,是一个命令行解释器程序,shell程序有很多种,例如:bash、dash、csh等。如果我们想要实现一个简单的shell程序,我们可以分为以下几步:

  1. 捕捉键盘输入 sacnf/gets
  2. 获取键盘输入的数据 eg:[ ls -l -a]
  3. 字符串格式解析(以空白字符为间隔,分割成一个一个的字符串,去掉空白字符,变成 [ls] [-l] [-a])
  4. 为shell程序创建一个子进程
  5. 在子进程中进行程序替换,替换为ls程序
  6. 进程等待,等待子进程退出

代码如下:

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
 int main(int argc,char *argv[])
{
    
    
     while(1){
    
    
          printf("[danggui@location]$");
          fflush(stdout);
          char tmp[1024]={
    
    0};  
          scanf("tmp"); //捕获键盘输入
          //解析字符串
          char *argv[32]={
    
    NULL}; 
          int argc = 0;
          char *ptr = tmp;
          while(*ptr != '\0'){
    
      
                if(!isspace(*ptr)){
    
    
                        argv[argc] = ptr;
                        argc++;
                        while(!isspace(ptr) && *ptr != '\0')ptr++;
                        *ptr = '\0';
                        }
                        ptr++;
                } 
                argv[argc] = NULL;
           //创建子进程
           pid_t pid = fork();
           if (pid < 0){
    
    
                        perror("fork error");
                        return -1;
                        }
           else if(pid == 0){
    
    
                execvp(argv[0],argv); //程序替换
                exit(0);
                }
           wait(NULL); //进程等待               
        }
          return 0;
        }

猜你喜欢

转载自blog.csdn.net/weixin_45177279/article/details/114455461