これはイライラする問題です。次の Java コードを実行しています。
try {
String query = someQuery, input = someInput;
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", query); // Windows
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
try
{
// Input to the query
OutputStream os = p.getOutputStream();
os.write(input.getBytes());
os.flush();
os.close();
} catch (IOException e)
{
}
System.out.println("STDIN : \n");
while ((s = stdInput.readLine()) != null)
{
System.out.println(s);
}
System.exit(0);
} catch (IOException e)
{
e.printStackTrace();
}
query
パイプコマンドです。内部の各サブコマンドquery
は、UNIX ライクな API 呼び出しです (独自の : Sirsi Unicorn API は、興味がある場合)。また、データベース呼び出しです。Windows コマンド プロンプトは、これらの API 呼び出しに対応できます。
問題:
2 つのデータベース コマンドをパイプしようとすると、プログラムは正常に実行されますが、3 つのデータベース コマンドをパイプすると、プログラムがハングします。これらの同じコマンドを cygwin で実行すると、プログラムは正常に動作します。興味深いことに、3 パイプ コマンドを 2 つの別個のコマンドに分割すると、プログラムは正常に実行されます。
質問:
私の質問は、Windows コマンド ラインにパイプ バッファの問題がありますか? Windows でのパイピングが機能しない場合はありますか? パイピングがタイムアウトすることはありますか?
この時点で、どんな情報でも大歓迎です。