如何渲染远程ncurses控制台?

Mar*_*ang 8 console networking telnet ncurses

我想写一个远程控制台,像telnet服务器一样工作.用户可以使用telnet登录服务器,然后编写一些命令来完成一些工作.

一个很好的例子是路由器操作系统的控制台.我现在困惑的是,我可以接受用户的输入,做一些然后打印一些文本,但我想使用ncurses使控制台具有更多功能(例如"cmd auto-complete",语法颜色...... ),那我该怎么办呢?因为控制台在用户端,如果服务器调用ncurses API,它只会改变服务器上的东西......

也许这是一个愚蠢的问题,但我真的是新手.任何建议表示赞赏.

ldx*_*ldx 10

这比你想象的要困难得多.

您需要了解终端的工作原理 - 它们使用特殊的控制序列来移动光标或颜色输出.这由终端特定的terminfo文件描述.Ncurses使用terminfo将API调用(例如,将光标移动到某个位置)转换为这样的控制序列.

由于终端(现今xterm,gnome-terminal,screen,tmux,等等)是在客户端,则必须从客户机到服务器的通过终端的类型.这就是为什么例如ssh将此信息从ssh客户端传递到服务器(echo $TERM在ssh会话中尝试- 如果您通过控制台登录则可能是'linux',如果您使用X和xterm,则可能是'xterm').此外,您最好在服务器上提供相应的terminfo.

另一个难题是伪终端.由于现在相对较少的人使用串行终端,因此他们的语义被模拟,以便curses最初为串行控制台开发的应用程序和库(例如及其朋友)继续工作.这是通过伪终端实现的 - 这些就像管道,主设备和从设备通信,一边写的任何东西都出现在另一边.例如,对于登录过程,getty可以只使用pty设备的一侧并认为它是一个串行线 - 您的服务器程序必须处理pty的另一端,通过网络将从pty获取的所有内容发送到您的客户端.

终端仿真器也使用ptys,tty在你的终端中键入,/dev/pts/9如果你使用的是终端仿真器,你会得到类似的东西.在pty的另一边,它通常是你的shell,通过pty与终端模拟器通信.

您的客户端程序可以或多或少地使用标准输入和标准输出.如果您的终端信息正确,则其余信息将由您的终端仿真器处理,只需将您从服务器程序收到的任何内容传递给您stdout,并将您读取的任何内容发送stdin到您的服务器程序.

希望我没有遗漏任何重要的细节.祝好运!