两个程序之间的输入输出通信

Posted

技术标签:

【中文标题】两个程序之间的输入输出通信【英文标题】: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环境的。 昨天由同一用户提出的***.com/questions/2186648/… 的欺骗 @neil。不,这不对。 java 程序允许不止一种方法来启动通信。第一个失败了,所以现在我正在尝试让另一种方法起作用。 【参考方案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

【讨论】:

以上是关于两个程序之间的输入输出通信的主要内容,如果未能解决你的问题,请参考以下文章

C++ 编写程序,输入两个数,输出两个数之间的所有数的二进制,三进制,和八进制?

使用标准输入和标准输出在 2 个进程之间进行通信

编制程序实现输入一个1~7之间的数字,输出相应的星期几,如输入1,则输出星期一

小鸟初学Shell编程管道符

C语言程序(输入两个数 a b 求ab之间的质数并且输出所有质数之和)

浏览器从输入到输出的过程与原理五之网络通信和三次握手