プロセスを開始し、整数を渡して、出力される値を取得するのを待ちます。私は次のことを試しました(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を返し、mParam
が0の場合は無限ループのままです。ただし、どの値を渡しても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);
}
アップデート:
エラーの少なくとも1つを見つけました。mParam
は整数であり、オプションの記号と数字の束で構成され、文字output.write
を書き込むため、整数を文字配列として書き込む必要があります。
char[] arr = String.valueOf(mParam).toCharArray();
output.write(arr);
ただし、入力に関係なく、この修正プログラムがハングした後
char retVal = (char) input.read();