如何在C中使用ssh特性实现控制台?

也就是说,它应该支持向上/向下箭头键和ctrl-r来反向search。 我应该从哪里开始?

答案取决于你想成为多少级别。 使用readlineeditline是高层次的答案。 下一个级别是使用libncurses并调用getch()来读取键盘输入,然后处理历史/搜索自己。

最低级别(对于终端)正在处理实际的输入字节流。 箭头键根据您的特定终端发送特定的字符序列。 例如,vt100仿真器将发送^ [[A为“向上箭头”,^ [[B为“向下箭头”等等。 要阅读这些,你需要设置你的终端属性立即返回输入,而不是等待换行; 要做到这一点使用termios功能来禁用规范的输入模式。 然后,只要阅读一次输入一个字符,看看你是否得到字符(27,91,65),你知道这是一个向上的箭头,并作出相应的反应。

如果您使用不同的终端仿真器(尽管您可以使用terminfo为其他终端获取适当的输入序列),这个低级别是乏味且脆弱的,并且不起作用。

如果你比终端(串口线,X窗口,位图显示等等)的级别低,那么答案会再次改变。