提问人:Green_Dad 提问时间:11/16/2023 更新时间:11/17/2023 访问量:51
如何在 C 中将 printf 重定向到新的 Konsole 窗口?
How do I redirect printf to new Konsole window in C?
问:
我有程序,它使用线程分别运行 2 个函数。我希望 func1 的输出位于我启动程序的控制台窗口中,并且 func2 的输出位于新创建的窗口中。对此有什么建议的解决方案吗?
我使用 system(“konsole”);在 func2 中创建新的控制台,但它只是在第一个窗口中冻结输出(我的意思是程序正在运行,但输出被冻结,直到我关闭新的控制台窗口)。
答:
1赞
n. m. could be an AI
11/16/2023
#1
这对我有用(在默认挂载的 Linux 上;其他操作系统或未挂载 /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);
写入以显示在 konsole 窗口中。我们依赖于 shell 的父进程是终端仿真器本身这一事实,并窃取其标准输入。p
一种更POSIX-y的方法是设置一个命名管道,并让程序写入它,而在生成的终端仿真器中,它正在读取它。cat
0赞
Armali
11/17/2023
#2
对 n. m. 的小简化可能是 AI 的好答案:
FILE *p = popen("konsole -e cat /proc/$$/fd/0", "w");
…
setlinebuf(p);
此外,可能值得注意的是,原因和终止;如果想要等待控制台窗口关闭,可以在没有生成其他子窗口之前使用。pclose
cat
konsole
wait(NULL)
评论
system
konsole
system()
popen()