【问题标题】:How to redirect stdin from my app to another knowing its PID (C,in windows)如何将stdin从我的应用程序重定向到另一个知道它的PID(C,在windows中)
【发布时间】:2010-01-22 14:59:17
【问题描述】:

我有一个脚本 vbs,它将一些数据重定向到 myApp 的标准输入(在 Windows 中用 C 语言编写)。 如果 myApp 在 myApp 找到第一个 myApp 会话的 PID 并将通过标准输入接收到的输入重定向到处理标准输入的 myApp 的第一个会话的标准输入之前已经启动了 myApp。 因此,当 myApp 接收到标准输入并且没有其他 myApp 实例正在运行时,它会处理标准输入并对其进行处理。 所以问题是:如何将标准输入从一个应用程序重定向到另一个知道这个 secnd spp 的 PID 的应用程序? 语言 = C 平台 = MSwindows

【问题讨论】:

  • 一些想法:命令行参数、文件 I/O、直接输入(例如模拟鼠标点击/按键)、使用 AutoHotKey 之类的程序(或者它的库,因为它是用 C 编写的) 如果您希望我详细说明其中之一,请告诉我。

标签: c windows stdin pid


【解决方案1】:

这对你有用吗? http://msdn.microsoft.com/en-us/library/ms682499%28VS.85%29.aspx

本文使用匿名管道创建具有重定向 IO 的子进程,您可以使用命名管道。使用这个函数:http://msdn.microsoft.com/en-us/library/aa365144%28VS.85%29.aspx你可以测试一个命名管道是否已经存在——如果不存在,你可以创建一个并等待它的输入。

我不确定 r.e.多个文件写入同一个命名管道 - 我假设所有数据都像一个文件一样通过,所以我将使用一个命名管道作为协商器,它为每个客户端实例化一个新的命名管道并将其管道添加到管道列表中等着。通过新管道使用消息将其关闭。

我不认为(如果我错了,请有人纠正我)重定向另一个进程的句柄不是那么容易。

【讨论】:

    【解决方案2】:

    好的,有机会编写程序的源代码,我将转向命名管道的想法。 App1 的主进程将检查 App 的另一个实例(即 App0)是否已经在运行。如果是这样,App1 收到的标准输入将被重定向到命名管道 X。 App0 继续使用命名管道 X 接收输入。 因此 App0 和所有其他 App (App2,e,4...) 实例将通过命名管道进行通信。 非常感谢NineFingers,你很有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多