这是我的代码:

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)并告诉它运行程序,然后文件的管道就可以工作了。

09-10 08:48
查看更多