C 正确使用readline以显示历史记录

C 正确使用readline以显示历史记录,c,history,C,History,我正在制作一个程序,它应该像linux(ubuntu)中真正的终端一样工作 我所拥有的是: int main(int argc, char *argv[]){ char cmd[500]; do{ printf("$ > "); fgets(cmd, 499, stdin); //executeCommands(cmd); }while(strcmp(cmd, "exit\n") != 0); return 0; }

我正在制作一个程序,它应该像linux(ubuntu)中真正的终端一样工作

我所拥有的是:

int main(int argc, char *argv[]){

   char cmd[500];

   do{
       printf("$ > ");
       fgets(cmd, 499, stdin);
       //executeCommands(cmd);
   }while(strcmp(cmd, "exit\n") != 0);

   return 0;
}
我想做的是:当我按下up键时,它会显示我之前键入的内容,等等。。。如果我按向上键3次,它应该会显示使用的第三个最新命令,依此类推底部键

我对C语言不是很在行,但我知道有一个库阅读行和一个历史阅读行,但我不知道如何使用它们来实现这一点

提前感谢

考虑使用该库(混合了可编辑的读线功能和历史记录功能)。它有用于自身和子库的文档

您将使用
readline
函数读取该行,并使用
add_history
将一些“已接受”的行添加到历史记录列表中。您可能还需要自定义

花几个小时阅读文档,代码示例对其进行了很好的解释

readline
库是GPL许可的,通常在Linux上可用。例如,在Debian上安装
libreadline6 dev
包;我不知道
readline
是否在Windows上工作。)

您可能不应该(在程序中)将-s与
readline
一起显式使用。如果需要,请深入阅读文档和源代码

你可能需要考虑库。它使您能够编码全屏终端应用程序(如

vim
emacs
are)

当然,
readline
ncurses
希望输入是伪输入(因此不能是管道或文件)。阅读该页面以了解更多血淋淋的细节,然后查看


如果您想要一个图形用户界面,请深入或。如果你想要一个web界面,你需要一些HTTP服务器库,比如or(还有很多关于web相关技术的知识:HTML5、CSS、Javascript、Jquery、AJAX等等,请参见-这是不完美的)。

你需要的是命令历史,你必须自己实现它。每次用户发出命令时,将其附加到列表中,然后当他们按向上箭头键时,从该列表中提取命令。列出您可以实现的内容。但是要在Linux中处理箭头键,实现起来会有点棘手。如果(kbhit()){c=getch();}您可以使用
setbuf
禁用输入缓冲区,使您能够检测光标上下键,但您必须自己完成所有文本输入处理,例如退格、左光标和右光标等等。@OlarAndrei
getch()
是特定于Windows MSVC的。好的,我将在读完所有文档后立即开始工作。谢谢