微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

在Linux中显式导出共享库函数

如何在jenkins上构buildcpp代码

通过USB指令步进电机控制器

使用MinGW无法在Windows上编译GTK +程序

I2C设备的linux驱动

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上不显示任何内容

Windows API不会退出

size_t和SIZE_T:有什么要注意的吗?

在c ++中打印完整的回溯

多重定义collect2:error:ld在C中返回1个退出状态

C ++在win 8中自动运行

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

因此,我建议你编写一个帮助程序,知道如何与主程序进行通信(通过套接字,命名管道或其他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编写应用程序,它只会在终端中运行,而应用程序将与你拥有终端的应用程序进行通信?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐