在windows-10上的cygwin上读取java中的EOF
我在cygwin上使用java实用程序(antlr),java是windows版本,我从cygwin bash运行javac/java 以下java代码用于在win8.1上处理cygwin,从stdin到EOF(改编自)读取一系列数字: 最近,我买了一台新的win10笔记本电脑,在上面安装了cygwin,它不再工作了。当我按下Ctrl-D时,程序继续等待输入,它不会被视为EOF 经过一些调试(请参见中的注释),“stty-a”报告“eof=^D;susp=^Z”,因此Ctrl-D应被视为eof。C++中的下面的等效代码如预期的那样工作,可能是因为该代码是用CygWin本身编译的,因此把^作为EOF。在windows-10上的cygwin上读取java中的EOF,java,cygwin,Java,Cygwin,我在cygwin上使用java实用程序(antlr),java是windows版本,我从cygwin bash运行javac/java 以下java代码用于在win8.1上处理cygwin,从stdin到EOF(改编自)读取一系列数字: 最近,我买了一台新的win10笔记本电脑,在上面安装了cygwin,它不再工作了。当我按下Ctrl-D时,程序继续等待输入,它不会被视为EOF 经过一些调试(请参见中的注释),“stty-a”报告“eof=^D;susp=^Z”,因此Ctrl-D应被视为eof。
#include <stdio.h>
int main() {
int i=0, status;
for(;;) {
printf("Enter a value %d:\n", i);
status = scanf("%d", &i);
if(status!=1) break;
}
}
#包括
int main(){
int i=0,状态;
对于(;;){
printf(“输入值%d:\n”,i);
状态=扫描频率(“%d”、&i);
如果(状态!=1)中断;
}
}
因此,在cygwin-win10的组合中似乎出现了一些问题。有什么提示,关于什么可能被破坏以及如何修复它吗
注意:我使用的是JavaJDK-7u72
在使用cygwin时,我使用windows本身的java安装。以下是用法:
在cygwin中:javac Hello.java;java你好
然后在新的一行中输入^D(即输入Return后立即输入)
在windows中:我还尝试在windows中运行相同的程序,只是为了确定这是windows问题还是cygwin问题
然后在新的一行中输入^D(或^Z)(即输入Return后立即输入)。当我在Windows程序中按^D或^Z时,程序将正确终止。在非Cygwin程序中,输入时按Ctrl-Z将触发文件结束条件 在Cygwin程序中,使用Cygwin DLL、输入触发器上的Ctrl-D和文件结束条件的程序。(这可以用
stty
命令重新配置,但您还没有这样做。)
程序如何执行并不重要,重要的是它是如何构建的
您正在运行的程序是java
命令,这是一个非Cygwin Windows可执行文件。java
命令正好运行您的java程序。java
是一个非Cygwin Windows程序,它将Ctrl-Z视为文件结尾字符
据我所知,你描述的所有行为都与此相符
如果你想让Java程序像Cygwin程序一样运行,你必须使用一个为Cygwin而构建的Java系统。我不确定这是否可行,但这超出了这个问题的范围,所以我将把这留给你和谷歌搜索。你如何编译和运行Java程序?你是否使用
Java
命令来运行它?是java
命令一个Cygwin可执行文件?那么type java
和file$(type-p java)
会说什么?没有Cygwin java。因此它是一个Windows java与cywin@Keith:请参阅上面的附加说明,我正在windows中使用java安装,包括它的类路径(/cygdrive/c/sw/jdk7u72/bin/java)”,第二个命令给出:“/cygdrive/c/sw/jdk7u72/bin/java:PE32+可执行(控制台)x86-64,用于MS Windows”@matzeri:是的,这是一个windows java与cygwin的交互。但是在windows中,它工作得很好,正如我前面提到的。但在cygwin中不工作。你能更新这个问题以明确你在做什么和发生什么吗?事实上,你在windows中使用java安装本身需要成为问题的一部分。在gwin部分,请说明键入Ctrl-D后会发生什么。在windows部分中,您会说“^D(或^Z)”;这两者是否都会导致程序终止?您的第四段掌握着关键点,因为java是非cygwin windows程序,它将Ctrl-Z视为EOF。但是,cygwin被配置为将Ctrl-Z视为挂起(正如“stty-a”所报告的),所以这可能就是问题所在。(不确定在我之前的8.1安装中ctrl-z是如何作为EOF工作的。)我可以使用stty配置它吗?如果是,如何配置?您正在从Cygwin shell运行一个非Cygwin程序。我不知道Cygwin是否在Windows程序看到ctrl-z(作为挂起)之前拦截它(作为文件结尾)或者没有,我没有CygWin系统来测试它。你可以用非CygWin编译器编译的C++程序来进行实验。
#include <stdio.h>
int main() {
int i=0, status;
for(;;) {
printf("Enter a value %d:\n", i);
status = scanf("%d", &i);
if(status!=1) break;
}
}