Io D将标准输出重定向到函数

Io D将标准输出重定向到函数,io,d,output,phobos,Io,D,Output,Phobos,我想将所有控制台输出重定向到我自己的GUI控制台,包括对C写函数的所有调用 我尝试过的事情: 正在创建一个新的流类,但stdio.stdout是一个文件,不能为其分配流 创建一个新的文件类,但不能扩展结构 我需要更深入地了解C绑定吗?非常感谢您的帮助。一种简单但非常有技巧的方法是使用C的freopen()将stdout重定向到一个临时文件,然后在控制台中读取该文件 您可以在操作系统级别将其重定向到管道中,然后让控制台监听管道的另一端。那会更干净,但更痛苦 不管怎样,我不认为D库会有多大帮助—

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

我尝试过的事情:

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

我需要更深入地了解C绑定吗?非常感谢您的帮助。

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

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


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

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

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


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

这个问题的典型解决方案在很多地方都有解释。下面是一篇解释如何在Windows上执行此操作的老文章:

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

简言之:

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

  • 第二种方法更简单,只要在运行某个子进程时使用
    popen()
    函数即可。此标准函数可以完成以上所有功能。

    此问题的典型解决方案在许多地方都有说明。下面是一篇解释如何在Windows上执行此操作的老文章:

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

    简言之:

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

  • 第二种方法更简单,只要在运行某个子进程时使用
    popen()
    函数即可。这个标准函数完成了以上所有的功能。

    我选择了另一个路径并编写了自己的writeln函数。显然,我使用的库中没有一个是直接输出终端的,因此它似乎比管道或文件更简单。

    我选择了另一条路径,编写了自己的writeln函数。显然,我使用的库中没有一个是直接进行终端输出的,因此它看起来不像管道或文件那样麻烦。

    如果子进程是您的D应用程序,那么这就行了。如果子应用程序是您自己的工作,那么您可以使用某种形式的IPC将输出发送到您的GUI。如果子进程是您的D应用程序,这将起作用。如果子应用程序是您自己的工作,那么您可以使用某种形式的IPC将输出发送到GUI。