在 C 中制作 shell 时,防止箭头键输出像 ^[[A 这样的原始字符

one*_*ach 4 c shell

我正在实现一个类似 shell 的程序,其中用户输入命令(由我定义)。像这样。

>cmd
result blah blah blah
>
Run Code Online (Sandbox Code Playgroud)

当我使用箭头键时,它会输出原始字符,例如^[[A.

>^[[A
Run Code Online (Sandbox Code Playgroud)

我还注意到 sqlite3 的行为至少在我在计算机上编译的版本中是这样的。

如何防止这种情况并让<-->键左右移动光标?

zwo*_*wol 5

GNU Readline是专门为此任务设计的库(即,允许用户编辑在交互式命令驱动程序中键入的命令)。请注意,该库是在 GPL(而不是LGPL)下分发的;如果这对你不起作用,editline是一个类似的库,具有 BSD 风格的许可证。

我注意到你说这是家庭作业,所以你可能想问你的老师是否需要你自己实现光标移动和行编辑。如果是这样,ncurses(如 jDourlens 所提到的)是抽象方面的下一步,如果您真的想自己做所有事情,请阅读termiosVT-220 控制序列(现在使用的几乎所有终端仿真器都模拟VT220 或其后代之一)。