是否有可能用C中的线程打开一个新的Linuxterminal?

似乎有很多关于这个接近的问题,但不是我所期待的。 我试图看看是否有办法打开一个新的terminal窗口(Linux),从我的主程序的线程/subprocess,并让该线程/subprocess拥有新的窗口。

只是一个完整的目标的概述:我将有一个主要的程序,我将启动,并将采取通过stdin ,如果我selectinput“启动助手”,它会产生一个新的terminal窗口,本身可以互动用户(stdin / stdout)。

所以我想要做的就是让主程序调用线程,让线程使用/拥有新的terminal窗口,然后当线程消失并死亡时,将该窗口closures。

我知道这个代码不能正常工作,但从概念上来说,我想要这样的东西:

 void * Runit() { system("gnome-terminal"); //Would like to get a handle to this window while(1) printf("I'm the thread!!!\n"); //Would like to get this printed to the new window } int main() { pthread_t child; pthread_create(&child, NULL, Runit, NULL); sleep(10); return 0; //Would like the child & its window to go away now. } 

对此的要求是松散的,它不必是可移植的,这只是一个小小的Linux工具,使我的生活更轻松。 它必须是C代码,所以没有shell脚本,除非该脚本可以从C运行。任何帮助,甚至其他想法,赞赏。

编辑:

我知道,在Linuxterminal有文件句柄/dev/pts/x ,我已经尝试过这样的代码:

 system("gnome-terminal"); sleep(2); //let the file handle show up in /dev/pts fp = fopen("/dev/pts/<new file handler number>"); fprintf(fp, "echo hi"); 

手柄可以正确打开,但terminal上不显示任何内容。

终端打开后, gnome-terminalxterm都可以运行任意命令。

因此,我建议你编写一个帮助程序,知道如何与主程序进行通信(通过套接字,命名管道或其他IPC机制)。 你的线程产生终端程序,传递你的帮助程序,它将在终端内运行,并通过上述IPC通道与线程通信。

libvte ,特别是vte_pty_*函数, 可以做你想做的事情。

你说这个问题的方式表明你不明白Linux和终端I / O是如何在Linux下工作的,所以我强烈建议你阅读这些内容。 从W. Richard Stevens的书“Unix环境下的高级编程 ”开始。

据我了解,应用程序必须能够打印到终端 – 但是你也想从它读取? 终端应该由用户来控制吗?

我会用终端的文件描述符来操作,你应该检查终端获取用户输入的文件(可能不是stdin,而是一些/ dev / pts?),终端将它输出到哪个文件中捕获它,你也可以写入它,导致内容显示在终端。 但要注意:1)终端本身可能会打开shell(bash) – 如果你写入/ dev / pts,它将显示在终端中,但不会被传递到终端中的bash进程 – 你不能远程在这样的temrinal命令,2)我认为/ dev / pts / x文件将在终端启动时创建,所以你不能fork + dup + exec,并捕获终端输出3)将是在终端上运行也会打印一些输出 – 它不会从/ dev / pts中读取

也许你需要用C编写应用程序,它只会在终端中运行,而应用程序将与你拥有终端的应用程序进行通信?