gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:05:42 26 4
gpt4 key购买 nike

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

它们不是 shell,只是用于输出的终端窗口。

我正在用 C 语言在 ubuntu 上进行编码。我可以正常工作,但由于某种原因,几分钟后,xterm 显示缓冲区似乎已填满(彼此独立),并且它们停止显示新文本。旧文本仍然存在,线程继续在后台执行其操作,但没有新输出。

我已经尝试了所有能找到的方法,但仍然感到困惑。

我似乎找不到可能的:

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

现在的情况是这样的(也请随时指出我正在做的事情中任何多余或错误的地方;注意,在这种情况下,可移植性并不是很重要)。我省略了错误检查。我希望我不必使用 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) 来生成多个 xterm,例如,将其运行为

ditto first second

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

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

关于c - 多个 xterm 伪终端仅用作多个线程的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35142200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com