我想设计一个像 那样的终端多路复用器tmux
,但不是那么复杂,是最小的东西,可以远程工作,使用ncurses
.
在服务器端,工作流程如下:
- 服务器进程总共创建 2 个进程:第一个进程将从
fork
父进程获取,forkpty
第二个进程将从父进程获取。forkpty
ed 进程将是一个execl
bash shell。第一个进程将使用调用返回的描述符与第二个进程对话forkpty()
。第一个进程还将与客户端通信。它就像一个中间人。它将把来自客户的信息传递给forkpty
教育流程,反之亦然。
在客户端,工作流程如下:
- 客户端将创建一个线程,负责与服务器通信。里面的线程就会运行
ncurses
。
问题是它ncurses
不解析来自 bash 或其他特殊字符的转义序列。我拍了两张屏幕截图(这是在客户端)。在第一个中,从服务器接收的信息(在 shell 中运行的命令的输出)使用write()
系统调用显示在标准输出上。在第二个屏幕截图中,显示了有关stdscr
使用该功能的信息printw
。这是两个屏幕截图之间代码的唯一区别。
我需要该printw
功能,因为我想将终端拆分到多个窗口上。我如何才能ncurses
轻松解释这些序列(以及那些特殊字符)?截图可以找到这里。
tmux
PS:我还没有那么先进,无法完全甚至部分理解的源代码。