java - 添加scanf使Java中的processInputStream消失
问题描述
我试图在 Java 中运行一个 C 程序,而 Java 应该获取我的 C 程序的stdin
/ stadout
。在我添加scanf
到 C 代码的那一刻,C 似乎看不到 Java 的输出。
当我只printf
在 C 中制作 s 并告诉 Java 时readLine
,它可以工作。当我将 Java 写入添加到进程中但尚未scanf
在 C 中添加时,它也可以工作,只是 C 忽略了 Java 的输出。在我添加scanf
after的那一刻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 scanf
but without fflush
even printf
s 不会出现在输出中,尽管它们首先执行。fflush
I can get to a point scanf()
is being executed,但 C 程序似乎没有看到 Java 的输出,并且 C 程序在 Java 程序等待时停止等待scanf()
输入readLine()
。因此,当我通过 解决一个问题时fflush()
,我不知道为什么人类输入的 C 在 Java 执行时正确和错误地工作(我也不知道为什么fflush()
只在 Java 执行时才需要)。
问题只是scanf()
似乎没有看到 Java 的写入。
解决方案
推荐阅读
- javascript - 从字符串数组创建括号符号
- react-native - CocoaPods 找不到 pod“glog”的兼容版本
- python - ORM 的 Python SQL 原生替代品
- c# - 在 Entity Framework Core 中将具有相同主键的相同实体附加到 DbContext 时出现问题
- synology - DSM7:安全连接到 LAN 中的 Synology NAS(无 Letsencrypt)
- c# - 热巧克力 v11 中的 DataLoaderOptions.AutoDispatch
- firebase-hosting - 使用 Cloud Run 进行 Firebase 托管的默认缓存行为是什么?
- django - Django:如何在 Django 中以周格式获取月份数据
- c# - 为什么将数组拆箱为不正确的类型不会在 C# 中引发异常?
- javascript - Uncaught TypeError: root is undefined papaparse