gpt4 book ai didi

java - 64位windows 7下Java程序与C程序的stdin/stdout通信

转载 作者:太空狗 更新时间:2023-10-29 22:53:32 24 4
gpt4 key购买 nike

我有一个从 Java 程序生成的 C 程序。 C程序是我的,Java程序是第三方的。 Java 程序以某种方式进行设置,以便它通过标准输入/标准输出与我的程序通信。

该系统多年来一直在 32 位 Windows XP 下运行良好。我刚刚购买了一台装有 64 位 Windows 7 的新机器。当我运行 Java 程序时(从“dos”框中),它成功启动了我的程序,并向我的程序发送了一个命令,我的程序成功执行了该命令。但是当我的程序返回到它的循环时

inputchar = getc(stdin);

getc(stdin) 永远不会返回。

一条线索:我对 Java 几乎一无所知,而且一开始我确实在运行它时遇到了一些麻烦。似乎从 java.com 安装后,如果我转到“dos”框并键入“java”,我只会收到无法识别的命令错误。然后我在 windows\sysWOW64 上找到了一个 java.exe,所以我输入了“windows\sysWOW64 java -jar blah blah...”然后程序看起来像是在运行(至少直到 getc(stdin) 问题)。

知道可能出了什么问题吗?我需要一个特殊的 64 位 Windows-7 Java 吗?有没有可能它只是一个写得不好的 java 程序,它的错误只在新操作系统上运行时才会显现出来?或者更有可能是我?

编辑:我的 C 程序在 64 位 Windows 7 机器上自行运行良好(即不是从 Java 生成)。

编辑:如果我输入“\windows\syswow64\java -version”,那么我得到...

java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

编辑:在旧的 XP 机器上,java 版本是 1.6.0_17-b04

编辑:我没有为新机器重新构建我的 C 程序。我刚刚复制了旧的 32 位版本。

编辑:java 程序发送的第一个“命令”是以“换行”字符 (ASCII 10) 结尾的字符串。

最佳答案

您是否尝试过编写不同的 Java 程序并从中启动您的 C 程序?基本上,你只需要这样的东西:

Process cPgm = Runtime.exec("your-C-program");
OutputStream stdin = cPgm.getOutputStream();
stdin.write("some-command".getBytes());
stdin.flush();
cPgm.waitFor();

这应该会启动您的程序,向它发送一些命令,然后等待它退出。如果程序没有退出命令,您也可以调用 cPgm.destroy() 来终止您的程序。我只是认为,如果您控制问题的两面,分析问题可能会更容易。

您是否已将程序编译为创建 64 位可执行文件?我注意到您的 JRE 路径中有“WOW64”,这让我想知道它是否在某种仿真下运行(WOW 曾经表示某些东西在 DOS 兼容模式下运行,也就是“Windows on Windows”)。如果是这样,则可能正在进行某种进程间缓冲,这可能解释了为什么您的读取没有返回。

关于java - 64位windows 7下Java程序与C程序的stdin/stdout通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2186648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com