Linux C控制台应用程序不使用“ keyup”上的先前命令

时间:2018-10-06 15:45:30

标签: c linux raspberry-pi3 raspbian

我遇到了以下问题:

int main(int argc, char **argv){
    while(1){
        char command[25];
        scanf(" %25[^\n]s", command);
        printf("Command '%s'\n", command); 
    }
    return 0;
}  

现在,每当我在控制台中键入内容时,它就会向我显示一条消息,其中包含我刚刚键入的内容。
但是,如果我使用向上箭头键将最后一条命令从内存中取出,则发送的命令是

  

^ [[A

这将导致光标被程序向上移动。
现在该如何解决?
我想触发内存中的最后一条命令。
预先感谢!

1 个答案:

答案 0 :(得分:4)

这实际上是您要求的非常重要的事情。幸运的是,有一个可修复它的库:GNU Readline library。但是,请注意其许可。最后我听说这是实际的GPL,因此如果您使用它,您自己的程序也必须是这样。 NetBSD有一个名为libedit的库,该库似乎声称在限制较少的许可证下可以做很多相同的事情。

以下是有关阅读热线的更多帮助:https://eli.thegreenplace.net/2016/basics-of-using-the-readline-library/

如果您可以忍受不要将其直接集成到自己的程序中的想法,那么有一个方便的实用程序,称为rlwrap,它可以为最终用户透明地提供至少一些好处。