分类: LINUX
2012-02-17 18:00:36
最近项目需要调试,模块中虽然提供了shell调试接口,可以跟内核模块进行通信。不过,繁多的命令各类和参数设置,总是令人心力交瘁。好在有了readline库,这一切麻烦将成为历史。
总结下Readline库的使用方法:
1)自定义要补全的命令格式:
typedef struct {
char *name; //命令名称
char *func; //出现该命令时,执行的操作
char *doc; //对命令的说明
}COMMAND;
2)初始化readline库,主要是注册rl_attempted_completion_function回调指针:
rl_attempted_completion_function = fileman_completion; //按tab键时,会触发fileman_completion
3)实现fileman_completion函数:
matches = (char **) NULL;
if (start == 0) {
//根据已输入的text,调用command_generator进行补全
matches = r1_completion_matches(text, command_generator);
}
4)实现command_generator函数:根据用户已经输入的text,通过查COMMAND表,返回补全后的字串
5)补全字串的显示等其它事情,readline库会帮你完成
6)main函数的编写:
readline("FileMan:"); //触发readline库,并打印提示符FileMan:
result = history_expand(s, &expansion); //当按下回车后运行该函数,好像把s的内容拷贝给expansion
add_history(expansion); //将命令添加到历史记录中,stifle_history(7)设置记录7个历史记录
execute_line(expansion); //根据COMMAND中的name,执行func
具体的代码请见参考资料,只要将matches = completion_matches(text, command_generator); 改为matches = rl_completion_matches (text, command_generator); 即可
参考资料:
http://blog.csdn.net/qq250941970/article/details/6319796