1

我想将所有控制台输出重定向到我自己的 GUI 控制台,包括对 C 写函数的所有调用。

我尝试过的事情:

  • 创建一个新的流类,但 stdio.stdout 是一个文件,您不能为其分配流
  • 完全创建一个新文件类,但不能扩展结构

我是否需要更深入地了解 C 绑定?非常感谢任何帮助。

4

3 回答 3

3

这个问题的典型解决方案在很多地方都有解释。这是一篇旧文章,解释了如何在 Windows 上执行此操作:http: //edn.embarcadero.com/article/10387

它在任何 UNIX 上的工作方式都相同。

简而言之:

  1. 创建两个管道,一个用于子进程标准输入,第二个用于子进程标准输出。
  2. 创建进程,并将这两个管道连接到它的标准输入/输出
  3. 现在从您的 GUI 中,您刚刚从被攻击到子进程 stdout 的管道中读取数据,然后向被攻击到子进程 stdin 的管道写入数据。

第二种更简单的方法是在运行某个子进程时简单地使用该popen()函数。这个标准功能或多或少地完成了上述所有工作。

于 2012-11-17T10:45:10.963 回答
2

我选择了另一条路径并编写了自己的 writeln 函数。由于显然我使用的库都没有直接进行终端输出,因此它似乎比管道或文件更麻烦。

于 2012-11-17T12:35:59.383 回答
1

一个简单但非常老套的方法是使用 C 的 freopen() 将标准输出重定向到一个临时文件,然后为您的控制台读入该文件。

您可能能够在操作系统级别将其重定向到管道中,然后让您的控制台在管道的另一端进行侦听。那会更干净,但更痛苦。

不管怎样,我认为 D 库不会有太大帮助——你会想要使用某种 C 库解决方案。

于 2012-11-16T23:50:49.930 回答