【问题标题】:is there a way to get hold on all three child's app pipes that is STDOUT, STDIN and STDERR in MinGW?有没有办法在 MinGW 中控制所有三个孩子的应用程序管道,即 STDOUT、STDIN 和 STDERR?
【发布时间】:2012-06-11 12:24:46
【问题描述】:

我在任何地方都找不到有效的示例。 MinGW 有 _popen() 但他们说它是通过 windows API 实现的,所以应该是可能的。但我能找到的所有示例都是针对 VisualC++ 或其他一些较新的语言(如 C# 等)的。

例如,我尝试为另一个程序制作一个包装器,它将所有标准错误显示为红色。

【问题讨论】:

标签: c++ winapi mingw pipe


【解决方案1】:

在你的情况下,popen不够好,你必须使用pipe创建文件句柄,fork创建新进程,close关闭旧FILENO_STDIN/@987654332 @ 在子进程中,dup2 将管道复制到新的 FILENO_STDIN/FILENO_STDOUT,最后一个 exec 函数启动新程序。

换句话说,你基本上必须重新实现popen函数。

也很常见,网上也有很多例子。

【讨论】:

  • 我在 MinGW 的窗口上有叉子和管道?
  • @rsk82 MinGW 应该有几乎完整的 POSIX 系统调用集。或者您也可以使用纯 WIN32 方式,正如 rubenvb 所评论的那样。
  • 是的,我可以去纯win32,但我不知道如何,msdn上的那些例子不起作用。 - 我还发现:article.gmane.org/gmane.comp.gnu.mingw.user/28505
猜你喜欢
  • 1970-01-01
  • 2013-05-21
  • 2019-06-21
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 2016-12-13
  • 1970-01-01
相关资源
最近更新 更多