在使用 bash 等终端操作时,我们所输入的命令一般被保存在用户家目录的 .bash_history 这个文件中。此外,我们还可以通过上下键翻看历史记录。下面使用 readline 库编程演示这种简单的情况,代码如下:
[C++] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <readline/readline.h>
#include <readline/history.h>
int main()
{
char *combuf;
//禁止 TAB 键的自动完成功能
rl_bind_key('\t', rl_abort);
while((combuf = readline("\n > ")) != NULL) {
if (strncmp(combuf, "quit", 4) == 0)
break;
printf ("[%s]\n", combuf);
if (combuf[0] != 0)
add_history(combuf); //将输入过的命令增加到历史记录
}
free(combuf);
return 0;
}
上面代码中,rl_bind_key() 函数的对 TAB 键进行了绑定,并用第 2 个参数是个函数指针。 当使用 rl_abort 时指示禁止自动完成功能(默认情况下开启),如果使用 rl_insert 则表示插入 TAB 指示符自身。
readline() 函数的只有一个参数,是输出一个提示符。当输入命令并回车时,该函数读入所输入的内容并返回它(去掉确定时所按下的回车键),返回的内容被存在 malloc() 函数所分配的一块内存区域中,该区域在使用完时,应该被释放,如程序中使用的 free() 函数。
add_history() 函数用来将返回的命令加入到命令历史列表,那么在提示符下使用上下键时可以翻看所敲过的历史命令。
运行输出:beyes@beyes :~/c/readline> ./com_his
> hello
[hello]
> hisll
[hisll]
> shell
[shell]
> find
[find]
> which
[which]
> quit
相关函数说明文档:http://www.math.utah.edu/docs/info/rlman_2.html#SEC36 |