【问题标题】:Input output communication between two programs两个程序之间的输入输出通信
【发布时间】:2010-02-04 09:48:10
【问题描述】:

我有一个名为 kgsgtp.jar 的第三方 Java 程序,它需要与我自己的 C++(但主要是 C)程序进行通信。 java程序的文档状态:

======================

您只需要确保它连接到的 kgsGtp 的标准输入 kgsGtp 的引擎输出和标准输出连接到引擎的 输入。通常,最简单的方法是通过分叉和执行 来自引擎内的 kgsGtp。

======================

现在我是一个相当称职的程序员,我觉得只要再提供一些线索,我就可以安排这一切。我怀疑如果描述扩大到 erm, 10?行而不是三个半,然后我会立即对其进行排序。

我猜这个文件的分叉是什么意思,是在我的程序中使用 WinExec() 或 CreateProcess() 来执行 java 程序?我也在猜测,也许当我使用正确的函数时,一个程序的stdin对应另一个程序的stdout的事实会自动发生?

【问题讨论】:

  • 我认为解释是针对unix环境的。
  • 昨天由同一用户提出的stackoverflow.com/questions/2186648/… 的欺骗
  • @neil。不,这不对。 java 程序允许不止一种方法来启动通信。第一个失败了,所以现在我正在尝试让另一种方法起作用。

标签: java c++ c windows


【解决方案1】:

该描述适用于 unix,其中将使用一系列 pipe()、dup2()、fork()/exec() 调用来执行此操作。

在此处查看 denis 的答案中的代码 sn-p:How do I get console output in C++ with a Windows program?,应该可以帮助您入门。

编辑:更完整的例子在这里:http://support.microsoft.com/kb/190351

【讨论】:

  • 这看起来很有希望......让我仔细检查一下我是否理解这一点。在他的代码中,当您到达注释“//readfile 和/或 writefile”... 这是否意味着从现在开始,我所做的任何 printf() 都将转到 teste.exe 的标准输入,反之亦然?
  • 不,这意味着从 hRead 句柄读取从 teste.exe 的 stdout/err 读取。那里的示例没有连接 teste.exe 的标准输入,但它会类似 - 创建另一个管道并在 STARTUPINFO 结构中设置 hStdInput。添加了另一个示例的链接。
【解决方案2】:

你需要的相当于windows上的POSIX dup() 可能是this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多