首页 > 解决方案 > 添加scanf使Java中的processInputStream消失

问题描述

我试图在 Java 中运行一个 C 程序,而 Java 应该获取我的 C 程序的stdin/ stadout。在我添加scanf到 C 代码的那一刻,C 似乎看不到 Java 的输出。

当我只printf在 C 中制作 s 并告诉 Java 时readLine,它可以工作。当我将 Java 写入添加到进程中但尚未scanf在 C 中添加时,它也可以工作,只是 C 忽略了 Java 的输出。在我添加scanfafter的那一刻printf(我可以在 before printf sleep(),将几个printf()s 排成一行等)我不再看到printf()Java 中的效果,尽管它是先执行的。

fflush()in C 可以让 Java 看到printf(),但 C 仍然看不到 Java 的写入。还尝试writer.flush();在 Java 中多次写入,但没有任何效果。并且还尝试通过 ProcessBuilder 运行 Process 完全没有区别。

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程序正确循环。with scanfbut without fflusheven printfs 不会出现在输出中,尽管它们首先执行。fflushI can get to a point scanf()is being executed,但 C 程序似乎没有看到 Java 的输出,并且 C 程序在 Java 程序等待时停止等待scanf()输入readLine()。因此,当我通过 解决一个问题时fflush(),我不知道为什么人类输入的 C 在 Java 执行时正确和错误地工作(我也不知道为什么fflush()只在 Java 执行时才需要)。

问题只是scanf()似乎没有看到 Java 的写入。

标签: javaciopipe

解决方案


推荐阅读