利用文件操作实现补全功能(二)

在上篇文章里面,我们实现了命令和文件的补全,而且与无缓冲输入结合了起来,可以说是很好玩了,但是还是和真正的终端差的不是一星半点,上网查了一下才发现,原来是有现成的库,readline,而且应用起来非常简单,至少比我们上一篇文章简单多了,

还可以有历史命令之类的功能,比我们的不知道强到哪里去了

不过,虽然话是这么说,但是还是要把功能做完才安心,接下来,我们将要实现的就是myshell

虽然跳跃幅度有点大,不过在有补全和无缓冲输入的基础下,就只是往上面添加东西就可以了

上次的补全其实还没完整,没有智能判断,不知道补全的是文件还是命令,这次我们加上这个好了

其实也没加什么多的东西,就只是加个判断,第一单词按table就是命令补全,第二个那理所当然就是文件补全了

而我们这些所有的功能,都是在输入上面做功夫的

//获取用户输入
void get_input(char *buf)
{    
    int num;                //记录最后一个输入命令的长度
    int fp;
    int count = 0;
    int len = 0;
    char c;
    char ch[50];                //存放输入的命令
    int flag = 0;                   //判断是文件补全还是命令补全                                                                                                                                                                                                                
    for(int i = 0;i < 50;i++)
        ch[i] = '\0';
    while(c = getch()) {
        switch(c) {
            case '  ':
                comple(ch,flag);    //补全
                print_prompt();
                printf("%s",ch);
                continue;
                break;
     
            case 127:
                if(count > 0) {
                    putchar('\b');      //回删
                    ch[strlen(ch) - 1] = '\0';
                    count--;
                }
                continue;
                break;
            case '\r':              //回车命令输入结束
                strcpy(buf,ch);
                close(fp);
                return;             //结束输入
        }
        if(c == ' ')
            flag = 1;               //此时标记为文件补全
        ch[count++] = c;
    }
}    

其中补全函数就是我们上篇文章的内容,不过多加了回删的功能,但其实还是不能完全的跟真正的回删比较,毕竟只是输出退格符。

下次再加上历史命令的功能,我们的这个shell的输入功能的雏形就完美了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值