Tag: xterm

多个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); […]

C:设置伪终端并使用xterm打开

以下简化的代码段由后台的线程执行。 该线程一直运行,直到他被告知退出(通过用户输入)。 在下面的代码中,我删除了一些错误检查以获得更好的可读性。 即使进行错误检查,代码也能很好地工作,并且创建和/或打开主设备和从设备。 … int master, slave; char *slavename; char *cc; master = posix_openpt(O_RDWR); grantpt(master); unlockpt(master); slavename = ptsname(master); slave = open(slavename, O_RDWR); printf(“master: %d\n”,master); printf(“slavename: %s\n”,slavename); 在我的机器上输出如下: master: 3 slavename: /dev/pts/4 所以我认为在程序运行时用命令xterm -S4/3 (4 = pt-slave,3 = pt-master)打开一个xterm应该为创建的伪终端打开一个新的xterm窗口。 但xterm只是开始运行而没有给出错误或任何进一步的信息,但根本没有打开一个窗口。 有什么建议吗? 编辑: 现在有了Wumpus Q.Wumbley的帮助xterm正常启动,但我无法将任何输出重定向到它。 我试过了: dup2(slave, 1); dup2(slave, 2); printf(“Some test message\n”); 用fopen然后使用fprinf fopen […]

读取控制台调色板的RGB值

肉 在C或C ++中有没有办法直接读取调色板RGB值? 特别有趣的是xterm(和其他人)使用的扩展颜色空间来定义多达256种终端颜色。 土豆 这个例子就是我要定义自己的颜色(使用ANSI转义序列,如\e]4;3;rgb:cc/78/33\e\\ ,或直接在c)但我需要保存我重新定义它们之前的用户颜色(在不太可能的情况下,他们已经重新定义了它们的颜色),以便我可以在程序完成时恢复它们。 Clobbering用户设置不是很好。 现在我的目标是使用ANSI转义序列以客户端方式执行此操作。 但是,由于我无法找到你如何得到颜色,我开始考虑用c或c ++来做这件事。 该解决方案将被编写为具有原生扩展(基本上是嵌入式c或c ++代码)的ruby gem,我的目标是获得跨平台解决方案,即使主要目标是OS X,其次是Linux环境…… 的调味汁 从我最初的实验开始,我已经到了可以为调色板中的代码点定义所需颜色的点。 我也可以轻松恢复默认的系统颜色(因为它们是ANSI标准)。 我在ANSI转义码中有一种方法可以做到这一点,但是没有找到。 我认为这是保存在某个地方的内存中,如果有任何方法可以找到哪里,阅读颜色应该很容易…… 甜点 总结到目前为止评论中的信息: 看起来一直这样做的唯一方法就是打印出不同颜色的█个字符的屏幕并抓住它的颜色。 由于这个项目应该是三个主要操作系统的跨平台,因为Linux目前在用户上有3个显示管理器,他们使用的方式和windows有两个(7和8)我只能想象有趣的小时和小时将会 :) 所以我的“解决方案”™只是破坏用户的颜色(如果他们有除系统默认值以外的任何东西……那么,让我们面对它是非常罕见的)。 我将提供一个设置文件,用户可以告诉插件如果他们对系统默认值不满意应该恢复哪些颜色。 务实和无聊,但它让我再次继续:)