小玩readline库,实现上下键和命令补全

5296阅读 0评论2012-02-17 qiujie1001
分类:LINUX

    最近项目需要调试,模块中虽然提供了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


    

上一篇:有用的rz,sz命令
下一篇:使用rdtsc指令,测量程序的运行速度