minishell全过程

#include <stdio.h>
#include <unistd.h>

void show()//程序开始输出与shell一样的命令行
{
    char path[256]={0};/创建buf存储当前路径
    getcwd(path,sizeof(path));//调用getcwd获得当前路径
    printf("linux@ubuntu:%s$ ",path);//存放在缓存区
    fflush(stdout);       //立即输出缓存区
}

开始界面的设置

 总体的所有文件

难点在于对于输入命令的解析,判断。mmmm

#include <string.h>
#include <stdio.h>
#include "show.h"//前面所设置的显示界面头文件
#include "docmd.h"//后面执行命令的头文件

int proccmd()//命令解释函数
{
    char cmd[512]={0};//存储用户输入的命令
    char* arg[4]={0};//定义指针数组,先分析命令最长不超过四个,所以定义四个指针
    while(1)
    {
        show();
        fgets(cmd,sizeof(cmd),stdin);//输入命令比如ls  敲\n
        cmd[strlen(cmd)-1]='\0';//去掉\n

        arg[0]=strtok(cmd," ");//用strtok函数将输入的命令用空格断开
        if(NULL == arg[0])
        {
            continue;//这是判断如果用户输入的是空格那么跳过此次循环从新开始下一次,相当于又把命 
                     //令行输出一边
        }
        else
        {
            break;//如果命令不为空跳出while循环
        }

    }
    arg[1]=strtok(NULL," ");//分别让剩下的三个指针指向分割下来的命令
    arg[2]=strtok(NULL," ");
    arg[3]=strtok(NULL," ");

    int ret = docmd(arg);//调用执行命令函数并且接收一下执行命令函数的返回值,判断是否成功
    
	return ret;
}

命令分解(解释函数)

#include <string.h>
#include "mingling.h"
#include "ll.h"//写的ll命令的头文件
#include "cat.h"//cat头文件
#include "ln.h"
#include "touch.h"//各种命令的头文件
#include "rm.h"
#include "mv.h"

int  docmd(char* arg[4])//传入刚才的指针数组
{
    if(0 == strcmp("
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值