linux 如何在C中将printf重定向到新的Konsole窗口?

eivgtgni  于 2023-11-17  发布在  Linux
关注(0)|答案(1)|浏览(168)

我有一个程序,它使用线程分别运行2个函数。我希望func 1的输出在控制台窗口中,我从那里启动程序,func 2的输出在新创建的窗口中。对此有什么建议的解决方案吗?
我使用system(“konsole”);在func 2中创建新的控制台,但它只是在第一个窗口中冻结输出(我的意思是程序正在运行,但输出被冻结,直到我关闭新的控制台窗口)。

7cwmlq89

7cwmlq891#

这对我来说是有效的(在Linux上,默认情况下挂载了/proc;其他操作系统或未挂载/proc的Linux上不起作用)。

#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则从其中阅读数据。

相关问题