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

时间:2016-02-01 23:10:23

标签: c io io-redirection xterm

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

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

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

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

我似乎无法找到可能的:

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

以下是现在的情况(也请随意指出我正在做的事情多余或错误;在这种情况下,N.B。便携性不是很重要)。我省略了错误检查。我希望我不必使用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实例。我必须再次system()致电killall xterm,因此对此的任何想法也将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

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

运行
ditto

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

使用ditto first second 。为此,您必须使用newterm选项配置ncurses。这并没有解决关闭xterms的问题。