1

再会,

我正在编写一个简单的 CLI(命令行界面)应用程序,它提供了一个简单的提示,可以接受来自用户的字符串、验证它们并根据输入执行某些操作。非常坦率的。

我正在寻找一个独立于平台的、非 GPL/LGPL 手段(或者,至少适用于 POSIX 兼容操作系统的东西,如 Linux、BSD 等),所以我可以使用向上/向下箭头键来回滚动在我的 CLI 应用程序中以前键入的命令的历史记录中,并让它们出现在输入行中。

目标是有效地模仿 BASH 和大多数其他 shell 中的历史特性。我只想使用向上/向下键并检测到它们。我假设我需要为此使用中断或一些专门的库;不过,我真的很想用标准的 ANSI C 来做这件事,并且必须完全避免任何第三方库。

4

4 回答 4

7

如果你坚持自己做,那我们只能说“自己做”;它不是非常复杂,但也不是早上的工作。

您应该非常认真地考虑使用其他人(包括)使用的GNU 。readlinebash它做了所有这一切,而且做得很好。

于 2012-04-27T19:11:06.267 回答
5

您可以使用 readline,或者您可以采取简单的方法,并且什么也不做。当你运行你的程序时,通过 rlwrap 调用它,你就可以免费获得历史编辑。换句话说,而不是:

$ mytool

你只是跑

$ rlwrap mytool

rlwrap 是 readline 的包装器,它允许您在不做任何工作的情况下获得 readline 的好处。

于 2012-04-27T19:20:11.710 回答
4

您可以使用 bash 使用的readline库。请注意,这是 GPL,因此您的代码必须是内部代码或 GPL。有 BSD 许可的 libedit,功能较少

于 2012-04-27T19:14:18.553 回答
1

正如其他答案所述,您确实应该使用 readline。否则,您将不得不使用缓冲区,并将标准输入文件描述符与read(). 您将需要设置包含您的历史记录的数据结构和/或文件。此外,您可以使用execvp()和/或system()调度命令。

于 2012-04-27T19:18:26.730 回答