Chinaunix首页 | 论坛 | 博客
  • 博客访问: 288061
  • 博文数量: 57
  • 博客积分: 1764
  • 博客等级: 上尉
  • 技术积分: 660
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-09 18:14
文章分类

全部博文(57)

文章存档

2012年(24)

2011年(33)

分类: 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


    

阅读(5152) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~