Java中如何向进程发送EOF?

2024-02-22

我想跑groff在Java程序中。输入来自字符串。在真实的命令行中,我们将通过以下方式终止输入^D在 Linux/Mac 中。那么Java程序中如何发送这个终止符呢?

String usage +=
    ".Dd \\[year]\n"+
    ".Dt test 1\n"+
    ".Os\n"+
    ".Sh test\n"+
    "^D\n";    // <--- EOF here?
Process groff = Runtime.getRuntime().exec("groff -mandoc -T ascii -");
groff.getOutputStream().write(usage.getBytes());
byte[] buffer = new byte[1024];
groff.getInputStream().read(buffer);
String s = new String(buffer);
System.out.println(s);

或者还有其他想法吗?


^D不是一个角色;这是一个由 shell 解释的命令,告诉它关闭进程的流(因此进程在stdin).

您需要在代码中执行相同的操作;冲洗并关闭OutputStream:

String usage =
  ".Dd \\[year]\n" +
  ".Dt test 1\n" +
  ".Os\n" +
  ".Sh test\n";
...
OutputStream out = groff.getOutputStream();
out.write(usage.getBytes());
out.close();
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中如何向进程发送EOF? 的相关文章

随机推荐