当前位置: 首页 > news >正文

c语言实现Linux命令行补全机制

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <readline/readline.h>
#include <readline/history.h>// 自动补全命令列表
const char *commands[] = {"start", "stop", "restart", "status", "help", "configure", "update", "exit", NULL
};// 循环查找对应命令函数
char *command_generator(const char *text, int state) {static int list_index, text_len;if (!state) {list_index = 0;text_len = strlen(text);}while (commands[list_index]) {if (strncmp(commands[list_index], text, text_len) == 0)return strdup(commands[list_index++]);list_index++;}return NULL;
}// readline绑定函数,Tab键会调用此函数
char **my_completion(const char *text, int start, int end) {return rl_completion_matches(text, command_generator);
}int main() {// 初始化 Readline 设置rl_attempted_completion_function = my_completion; // 注册补全函数rl_attempted_completion_over = 1; // 禁止默认补全行为using_history();                    // 启用历史记录while (1) {char *input = readline("Narnat> ");if (!input) break;              // EOF 退出if (*input) {add_history(input);         // 添加到历史记录printf("执行命令: %s\n", input);}free(input);}return 0;
}

核心在于使用Tab按键后会自动调用readline提供的接口函数rl_attempted_completion_function,将此接口函数实现完毕后即可遍历自己设置的命令,将符合的命令回显出来
当用上下按键的时候会调用到history函数中储存的历史命令,将之前用过的命令显示出来

编译:

gcc -o main main.c -lreadline -lncurses

效果:

在这里插入图片描述

相关文章:

  • 如何训练意志力
  • Android 13中 配置签名文件与内置相应的Apk
  • QGIS新手教程2:线图层与多边形图层基础操作指南(点线互转、中心点提取与WKT导出)
  • Docker安装 | Spug
  • 力扣经典算法篇-15-整数转罗马数字(自顶向下逐步分解)
  • 智能外呼机器人——客户筛选
  • Linux基础 -- 设备树引脚复用之`/omit-if-no-ref/` 用法解析
  • 技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(下)
  • Abp Vnext Pro Vben5
  • 【QueryServer】dbeaver使用phoenix连接Hbase(轻客户端方式)
  • unityPc端设置了全屏(Exclusive Fullscreen)但是仍然有白边解决办法
  • 网站每天几点更新,更新频率是否影响网站收录
  • Nidec Digitax HD M753 伺服控制器 尼得科
  • SpringBoot自定义实体类字段的校验注解
  • 响应式布局进阶:企业商城系统复杂交互页面的多端适配方案
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 按钮大小设置的小技巧
  • 零衍课堂 | 环境初始化部署流程
  • 国内有哪些智能外呼机器人
  • 三强联合!Attention+LSTM,结合特征融合,起手二区!
  • git和gitee的常用语句命令
  • 怎样建设凡科网站/软件测试培训机构哪家好
  • 一品威客网app下载/seo的作用有哪些
  • wordpress付费才能看/seo分析
  • 建站套餐/小熊代刷推广网站
  • 市住房和城乡建设局网站/永久免费的建站系统有哪些
  • 如何搭建门户网站/怎么自己创建网站