D重定向标准输出功能

时间:2012-11-16 23:38:53

标签: io d output phobos

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

我尝试过的事情:

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

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

3 个答案:

答案 0 :(得分:3)

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

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

简而言之:

  1. 创建两个管道,一个用于子进程stdin,第二个用于子进程stdout。
  2. 创建进程,并将这两个管道附加到其stdin / out
  3. 现在从您的GUI中,您只是从被攻击到子进程标准输出的管道中读取,并且您写入被攻击到子进程标准输入的管道。
  4. 更简单的第二种方法是在运行某个子进程时简单地使用popen()函数。这个标准功能在上述情况下做得更多/更少。

答案 1 :(得分:2)

我选择了另一条路径并编写了自己的writeln函数。由于我使用的库中没有一个直接输出终端输出,所以它似乎不像管道或文件那么麻烦。

答案 2 :(得分:1)

一种简单但非常简单的方法是使用C的freopen()将stdout重定向到临时文件,然后读取控制台中的文件。

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

无论哪种方式,我认为D库不会有太多帮助 - 你会想要使用某种C库解决方案。