这是我的代码:
Process p1;
try {
p1 = Runtime.getRuntime().exec( "utils/a.out < utils/test_c2.txt > utils/result.txt" );
p1.waitFor();
} catch ( Exception e ) {
System.out.println("Something went bad!");
}
我已经读过输入缓冲区大小应该有问题,但是在这种情况下,启动进程的所有输出都被重定向到&#34; utils / result.txt&#34;,因此启动的进程不应该达到死锁。当我从终端运行相同的命令时它工作。也许描述什么是&#34; a.out&#34;会有所帮助。我从flex文件中获取它如下:
$ flex rulex.lex
$ gcc lex.yy.c -lfl
任何帮助将不胜感激。
答案 0 :(得分:1)
子进程正在等待读取stdin
上的数据。 Java不会在shell中启动子进程,因此没有可用的管道。您需要使子程序将文件作为参数并打开文件本身。另一个选择是启动一个shell(比如bash)并告诉它运行程序,然后文件管道就可以了。