多个xterm伪终端仅用作多个线程的输出

我一直在努力从我的程序中启动几个线程,我希望每个线程输出到各自的终端窗口(我已经以平铺模式弹出)。

它们不是炮弹,只是输出的终端窗口。

我正在用C编写ubuntu。我有它工作,但由于某种原因,几分钟之后就好像xterm显示缓冲区填满(彼此独立)并且它们停止显示新文本。 旧文本仍然存在,线程在后台继续做他们的事情,但没有新的输出。

我已经尝试了所有我能找到的东西并且仍然感到困惑。

我似乎找不到可能的:

  • 缓冲区我需要刷新或清除
  • 一种清除屏幕的方法(即使在我重定向输入或尝试将它们作为输出发送到xterm之后,那些VT转义码也什么都不做)
  • 一种将光标重新定位在终端窗口左上角的方法
  • 一种重置我指向适当的/ dev / pts的文件描述符的方法

以下是它现在的情况(也请随意指出我正在做的任何多余或错误;在这种情况下,NB可移植性并不是非常重要)。 我省略了错误检查。 我希望我不必使用system(),但这是我可以使它工作的唯一方法(posix_spawn也没有工作)。 此代码在每个线程中运行(未显示切片效果,但它通过共享内存和xterm命令行上的一些其他参数进行管理):

char buf_xt[256]; // Used along with sprinf() and write() to output to xterm char *pSptyName; int xterm_fd1; // File descriptor for xterm xterm_fd1 = posix_openpt(O_RDWR | O_NONBLOCK | O_NOCTTY); pSptyName = ptsname(xterm_fd1); sprintf(buf_xt, "xterm -S%s/%d &", pSptyName, xterm_fd1); system(buf_xt); 

我像这样输出到xterm:

 sprintf(buf_xt, “Writing to xterm.\n”); write(xterm_fd1, buf_xt, strlen(buf_xt)); 

我希望也许来自诅咒的newterm()可以做到这一点(也可以接受其他想法),但是我无法在任何地方找到任何有用的文献或例子,所以我希望这里有人可以提供一些真实的信息而不是RTFM(我已经有一个具体的实现将有助于填补文档中的漏洞)。

作为旁注,当我关闭程序时,我没有办法单独关闭xterm实例。 我必须对killall xterm进行另一个system()调用,所以对此的任何想法也将非常感激。

谢谢

在ncurses源代码中,可以编译ditto程序(test / ditto.c)以生成几个xterms,例如,将其作为

 ditto first second 

用这些标题创建两个xterms(除了你开始的屏幕)。

那使用newterm 。 为此,您必须使用--with-pthread选项配置ncurses。 这并没有解决关闭xterms的问题。