我目前正在尝试使用ncurses编写一个最小的终端多路复用器.但是,当我尝试execvshell时,它不会打印到窗口,而是启动一个新的子进程来控制窗口(即忽略ncurses).
我怎样才能防止这种情况并让ncurses控制它?有没有办法获得tty并控制它?
编辑
感谢Ross Ridge的评论,我现在知道我需要创建一个伪终端,然后我将其读入一个ncurses窗口.但是,我无法弄清楚如何在ncurses窗口中打印stdout.是否有读取文件描述符的ncurses函数?或者我必须使用read()与printw()不知何故?
您将需要大致执行以下操作:
man pty则会有所帮助.另外看看openptyfork(),你必须和孩子一起,dup2奴隶fd上stdin,stdout和stderr这个答案,这个答案和这个答案可能很有用,但我特别建议第一个给出它在UNIX环境中引用Stephens的高级编程(我已经链接到更现代的版本),并且源代码是可下载的.买这本书,因为它是一个非常宝贵的资源,但是如果你查看pty那里的目录(我不会因为版权原因而复制和粘贴),你会找到一个很好的例子forkpty.
这就留下了如何从运行的流程中获取输出数据的问题ncurses.好吧,你需要编写一个终端模拟器.选择您要模拟的终端,读取它使用的所有控制序列,并实现所有这些控制序列.
如果这听起来很像辛勤工作(就是这样),我建议你看看使用tmux或screen代替; 后者完全符合您的要求,包括完整的VT100/ANSI终端仿真器; 前者几乎完整.tmux是一个BSD许可程序,这意味着您可以简单地调整源代码,以便在不太可能发生的情况下进行竞标.screen是GPL,所以除非你的程序也是GPL,否则它只是为了灵感.
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |