Я пытался запустить программу на C внутри Java, и Java должна получить stdin
/ stadout
моей программы на C.В тот момент, когда я добавляю scanf
к коду C, C, похоже, не видит вывод Java.
Когда я делаю только printf
s на C и говорю Java на readLine
, это работает.в тот момент, когда я добавляю в Java запись в процесс, но еще не scanf
s в C, он также работает, просто C игнорирует вывод Java.В тот момент, когда я добавляю scanf
после printf
(и могу сделать до printf sleep()
, поместить несколько printf()
в строку и т. Д.), Я больше не вижу эффекта printf()
внутри Java, хотя он выполняетсяfirst.
fflush()
в C позволяет Java видеть printf()
, но C по-прежнему не может видеть записи Java.Также пробовал writer.flush();
и несколько записей в Java без эффекта, который можно увидеть.А также попытался запустить Process через ProcessBuilder без каких-либо различий.
public static void main(String[] args) throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec("Project9.exe");
InputStream processInputStream = process.getInputStream();
OutputStream processOutputStream = process.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(processOutputStream));
BufferedReader reader = new BufferedReader(new InputStreamReader(processInputStream));
String val;
int n=0;
while(true){
while((val=reader.readLine())!=null){
System.out.println(val);
}
writer.write(n);
writer.newLine();
n++;
}
И программа C:
#include <stdlib.h>
#include <stdio.h>
int main() {
int n=0;
while (1) {
printf("test %d\n", n);
printf("test %d\n", n);
printf("test %d\n", n);
printf("test %d\n",n);
fflush(stdout); //(1)
scanf("%d", &n);
}
return;
}
С комментариями fflush
и scanf
, программы должным образом зациклены,С scanf
, но без fflush
, даже printf
s не отображаются на выходе, хотя они выполняются первыми.С помощью fflush
я могу добраться до точки, которую выполняет scanf()
, но программа C, похоже, не видит вывод Java, и программа C перестает ждать ввода на scanf()
, пока программа Java ожидаетreadLine()
.Поэтому, когда я решил одну проблему с помощью fflush()
, я понятия не имел, почему C с помощью человеческого ввода работает правильно и неправильно, когда Java выполняет его (также я не знаю, почему fflush()
требуется только при выполнении Java).
Проблема просто в том, что scanf()
, похоже, не видит записи Java.