欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux基础6--MyShell

程序员文章站 2022-07-12 12:18:41
...
#include<stdio.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<string.h>
#include<ctype.h>
#include<unistd.h>


void do_shell(int argc,char *argv[])
{
        pid_t pid = fork();
        if(pid == 0){
                if(execvp(argv[0],argv) == -1)
                        {
                                perror("execvp");
                                exit(1);
                        }
                }else
                        wait(NULL);
}

void do_parse(char *buf)

{
        int argc = 0;
        char *argv[8];
        int i;
        int status = 0;
        for(i=0;buf[i]!=0;i++){
                if(!isspace(buf[i]) && status ==0){
                        argv[argc++] = &buf[i];
                        status =1;
                }else if(isspace(buf[i])){
                        status = 0;
                        buf[i] = 0;
                }
        }
        argv[argc] = NULL;
        do_shell(argc,argv);
}


int main()
{
        char buf[1024] = {};
 while(1){
        memset(buf,0x00,sizeof(buf));


        printf("TSL_shell:");
        scanf("%[^\n]%*c",buf);
        if(strncmp(buf,"exit",4) == 0)
                exit(0);
        do_parse(buf);
        }
}


Linux基础6--MyShell