zoukankan      html  css  js  c++  java
  • 编程实现linux下的shell

    /*************************************************************************
        > File Name: Kris_shell.c
        > Author: KrisChou
        > Mail:zhoujx0219@163.com 
        > Created Time: Thu 21 Aug 2014 04:31:55 PM CST
     ************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    #define PROMPT ">>" 
    #define ARG_CNT 32
    
    void command_to_arglist(char** arglist,char *cmd_line);
    
    int main(int argc, char *argv[])
    {
        char cmd_line[1024];
        char *arglist[ARG_CNT];
        while(memset(cmd_line,0,1024), printf("%s",PROMPT), fgets(cmd_line,1024,stdin))
        {
            if(cmd_line[0] != '
    ')
            {
                cmd_line[strlen(cmd_line) - 1] = ''; //将读进来的换行符变成''
                command_to_arglist(arglist,cmd_line);
                if(fork() > 0)
                {
                    wait(NULL);
                }else
                {
                    execvp(arglist[0],arglist);
                    exit(0);
                }
            }
        }
        return 0;
    }
    
    static int my_isspace(char c)
    {
        if(c == ' '|| c == '
    ' || c == '	' || c =='v')
            return 1;
        else
            return 0;
    }
    
    static void command_to_arglist(char** arglist,char *cmd_line)
    {
        int cnt = 0;
        int bg,end;
        bg = 0;
        while(cmd_line[bg] != '')
        {
            while(my_isspace(cmd_line[bg]))
            {
                bg++;
            }
            if(cmd_line[bg] == '')
            {
                break;
            }
            end = bg;
            while(cmd_line[end] != '' && !my_isspace(cmd_line[end]))
            {
                end++;
            }
            arglist[cnt] = (char*)calloc(1, (end-bg+1));
            strncpy(arglist[cnt],cmd_line+bg,(end-bg));
            cnt++;
            bg = end;
        }
        arglist[cnt] = NULL;
        
    }
  • 相关阅读:
    第七次作业-正规式到正规文法与自动机
    第六次作业——正规文法与正规式
    作业5 词法分析程序的设计与实现
    作业4—文法和语言总结与梳理
    第三次作业
    第二次作业-语言和文法
    编译原理第一次作业
    记录在腾讯云上搭建Ubuntu服务器
    第八章总结--排序 数据结构课程终章
    第七章-查找
  • 原文地址:https://www.cnblogs.com/jianxinzhou/p/3928615.html
Copyright © 2011-2022 走看看