c-正确使用读出线显示历史



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

我有这个:

int main(int argc, char *argv[]){
   char cmd[500];
   do{
       printf("$ > ");
       fgets(cmd, 499, stdin);
       //executeCommands(cmd);
   }while(strcmp(cmd, "exitn") != 0);
   return 0;
}

我想做的是:当我按下向上键时,它应该显示我以前键入的内容,依此类推……如果我按下向键3次,它应该向我显示使用的第三个最新命令,依此类推。

我不太擅长C,但我知道有一个库读出线和一个历史读出线,但我不知道如何使用它们来实现这一点。

提前感谢

考虑使用GNU读线库(混合了可编辑读线功能和历史功能)。它有Readline本身和历史子库的文档。

您将使用readline函数读取该行,并使用add_history添加一些";"已接受";行。您可能还想自定义完成符。

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

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

您可能不应该在readline中显式地使用(在程序中)信号(7)-s。如果你这样做了,深入研究文档和源代码。

您可能需要考虑ncurses库。它使您能够对全屏终端应用程序(如vimemacs)进行编码。

当然,readlinencurses希望输入是伪tty(因此它不能是管道或文件)。阅读tty解密页面,了解更多血腥的详细信息,并参阅termios(3)!

如果您想要一个图形用户界面,请深入了解GTK或Qt。如果你想要一个网络接口,你需要一些HTTP服务器库,比如libonion或Wt(以及许多关于网络相关技术的知识:HTML5、CSS、Javascript、Jquery、AJAX……请参阅w3schools,这是不完美的)

最新更新