D 将标准输出重定向到功能



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

我尝试过的事情:

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

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

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

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

总之:

  1. 创建两个管道,一个用于子进程标准输出,另一个用于子进程标准输出。
  2. 创建进程,并将这两个管道连接到其标准输入/输出
  3. 现在,从您的 GUI 中,您只需从受攻击到子进程 stdout 的管道中读取,然后写入被攻击到子进程 stdin 的管道。

第二种方法(更简单)是在运行某个子进程时简单地使用 popen() 函数。此标准功能可执行上述所有操作。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新