多个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的问题。