Linux--自主实现minishell

自主实现简单的minishell:命令行解释器

  1. 捕捉用户键盘输入 [ ls -a -l ] – char *gets(char *s)
  2. 解析输入信息–得到命令名称,运行参数[ls] [-a] [-l]
  3. 创建子进程,给子进程通过命令名称进行程序替换(让子进程运行命令)
  4. 进程等待,等待子进程退出,防止出现僵尸进程
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
#include<ctype.h>
int main(int argc, char *argv[])
{
    
    
	while(1)
	{
    
    
       printf("[minishell]$ ");
       fflush(stdout);
       char cmd[1024] = {
    
    0};
       fgets(cmd, 1023, stdin);
       cmd[strlen(cmd) - 1] = '\0';
       char *ptr = cmd;
       char *arg[32] = {
    
    NULL};
       int ac = 0;
       while(*ptr != '\0')
       {
    
    
          if(!isspace(*ptr))
          {
    
    
             arg[ac++]=ptr;
             while((!isspace(*ptr)) && (*ptr) != '\0')
               ptr++;
             *ptr = '\0';
          }
          ptr++;
       }
       arg[ac]=NULL;
       if(strcmp(arg[0], "cd") == 0)
       {
    
    
          chdir(arg[1]);
          continue;
       }
       pid_t pid = fork();
       if(pid<0)
       {
    
    //创建子进程失败
          continue;
       }
       else if(pid ==0)
       {
    
    
          execvp(arg[0], arg);
          exit(-1);
       }
       wait(NULL);                                                                                  
    }
    return 0;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46659987/article/details/115031256