我有一个程序,它使用线程分别运行2个函数。我希望func 1的输出在控制台窗口中,我从那里启动程序,func 2的输出在新创建的窗口中。对此有什么建议的解决方案吗?我使用system(“konsole”);在func 2中创建新的控制台,但它只是在第一个窗口中冻结输出(我的意思是程序正在运行,但输出被冻结,直到我关闭新的控制台窗口)。
7cwmlq891#
这对我来说是有效的(在Linux上,默认情况下挂载了/proc;其他操作系统或未挂载/proc的Linux上不起作用)。
/proc
#define KONSOLE_BUFSIZE 512 char buf[KONSOLE_BUFSIZE]; FILE* p = popen("konsole -e 'sh -c \"cat /proc/$PPID/fd/0\"'", "w"); if (p == NULL ) { /* process error */ } setvbuf(p, buf, _IOLBF, KONSOLE_BUFSIZE); ... pclose(p);
字符串对p的写入出现在konsole窗口中。我们依赖于shell的父进程是终端模拟器本身的事实,并窃取其标准输入。一种更符合POSIX标准的方法是设置一个命名管道,并让程序向其中写入数据,而派生的终端模拟器中的cat则从其中阅读数据。
p
cat
1条答案
按热度按时间7cwmlq891#
这对我来说是有效的(在Linux上,默认情况下挂载了
/proc
;其他操作系统或未挂载/proc的Linux上不起作用)。字符串
对
p
的写入出现在konsole窗口中。我们依赖于shell的父进程是终端模拟器本身的事实,并窃取其标准输入。一种更符合POSIX标准的方法是设置一个命名管道,并让程序向其中写入数据,而派生的终端模拟器中的
cat
则从其中阅读数据。