我等待启动一个进程,将一个整数传递给它,然后得到一个它打印出来的值。我尝试了以下(在 Windows 中):
public class Example {
public static Boolean call() throws IOException {
String mFilename = "f.exe";
int mParam = 0;
Process p = Runtime.getRuntime().exec(mFilename);
BufferedReader input = new BufferedReader
(new InputStreamReader(p.getInputStream()));
BufferedWriter output = new BufferedWriter
(new OutputStreamWriter(p.getOutputStream()));
output.write(mParam);
output.flush();
char retVal = (char) input.read();
return !(retVal == '0');
}
public static void main(String[] args) throws IOException {
System.out.println(call());
}
}
mFilename
是可执行文件的路径。该过程返回正输入 1,负输入 0,如果为 0,则保持无限循环mParam
。但是,我发现无论传递给它的值retVal
是什么,始终是 1。我做错了什么?
请原谅我几分钟前删除了这个问题,我认为问题出在retVal
但显然这不是这段代码中唯一的问题。
子进程,用 C++ 编写:
#include <iostream>
#include <Windows.h>
bool f(int x)
{
if (x)
return x > 0;
while (1)
Sleep(100);
}
int main()
{
int x;
std::cin>>x;
std::cout<<f(x);
}
更新:
我发现了至少一个错误。由于mParam
是一个整数,它由一个可选的符号和一堆数字组成,并且output.write
写入字符,我需要将我的整数写入一个字符数组:
char[] arr = String.valueOf(mParam).toCharArray();
output.write(arr);
但是,无论输入如何,在此修复程序挂起之后
char retVal = (char) input.read();