如何在C语言中实现带SSH功能的控制台?

3

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


你需要所有SSH功能,还是只需要有命令历史记录的能力? - Alan
2
如果您想要优秀的行编辑功能,可以研究GNU readline库,该库为许多程序提供这些功能。 - Jeremy Roman
这些项目不是SSH功能,而是shell(bash/tcsh/zsh)的功能,它们很可能使用readline来实现。 - evil otto
@Alan,我只需要提到的那些功能。 - new_perl
1个回答

1
答案取决于你想要多底层。使用readlineeditline是高级别的答案。下一级别是使用libncurses并调用getch()读取键盘输入,然后自己处理历史记录/搜索。
最低级别(针对终端)是处理字节的实际输入流。箭头键根据您特定的终端发送特定的字符序列。例如,vt100模拟器将发送^[[A表示“向上箭头”,^[[B表示“向下箭头”,等等。要读取这些内容,您需要设置终端属性以立即返回输入而不等待换行符;要做到这一点,请使用termios函数禁用规范输入模式。然后只需逐个字符读取输入,并查看是否获得字符(27、91、65),您就知道这是一个向上箭头并相应地进行响应。
这种低级别的方法很繁琐且易错,并且如果您使用不同的终端模拟器,则无法正常工作(尽管您可以使用terminfo获取其他终端的适当输入序列)。
如果您的级别低于终端(串行线路、X窗口、位图显示等),那么答案会再次改变。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接