两个程序之间的输入输出通信
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++ 编写程序,输入两个数,输出两个数之间的所有数的二进制,三进制,和八进制?
编制程序实现输入一个1~7之间的数字,输出相应的星期几,如输入1,则输出星期一