这是我的代码:
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!");
}
我已经读到输入缓冲区的大小应该有问题,但是在这种情况下,启动进程的所有输出都将重定向到“ utils / result.txt”,因此启动进程不应达到死锁状态。当我从终端运行相同的命令时,它将起作用。描述什么是“ a.out”可能会有所帮助。我是从flex文件中获得的,如下所示:
$ flex rulex.lex
$ gcc lex.yy.c -lfl
任何帮助,将不胜感激。
最佳答案
子进程正在等待读取stdin
上的数据。 Java不在外壳程序内启动子进程,因此没有管道可用。您需要使子程序将文件作为参数并打开文件本身。另一个选择是启动一个shell(如bash)并告诉它运行程序,然后文件的管道就可以工作了。