Java Process.getOutputStream()是如何实现的?

时间:2010-02-26 04:22:10

标签: java ipc

我知道答案取决于特定的JVM,但我想了解它是如何实现的?是popen(posix)吗?在效率方面,我需要记住一些事情(除了使用javadoc建议的缓冲流)。我很想知道是否有一个关于JVM实现的一般参考来回答这些问题。

1 个答案:

答案 0 :(得分:3)

查看source of JDK

在这种情况下,对于Unix,请查看UnixProcess class.it执行fork和exec并在本机文件描述符周围包装文件和缓冲区流。

pid = forkAndExec(prog,
              argBlock, argc,
      envBlock, envc,
      dir,
      redirectErrorStream,
      stdin_fd, stdout_fd, stderr_fd);
stdin_stream = new BufferedOutputStream(new FileOutputStream(stdin_fd));

对于本机代码,请查看: 天然的/爪哇/郎/ UNIXProcess_md.c

它做了一些有趣的事情! 它打开管道并将它们作为STDIN,STDOUT,STDERR给予孩子,管道的另一侧由父母使用!

简而言之,IPC机制就是管道。