使用 Java 中的编号文件描述符

2022-09-02 03:10:50

我需要从 Java 访问编号的文件描述符 - 除了 0、1 或 2。

如何做到这一点?我查看了该类,但没有找到任何方法使用给定的文件描述符编号对其进行初始化。FileDescriptor

作为一个具体的例子,假设Java被另一种编程语言作为子进程调用。文件描述符 3 和 4 由其他语言提供,用于输入和输出。

在Java中,我需要的是连接到这些文件描述符的对象,就像 System.in,System.out和System.error连接到file-desctiptors 0,1和2一样。InputStreamOutputStream

我使用的是Java 1.6,这应该在Unix类似的系统上运行。


答案 1

我很确定这不能使用纯Java来完成 - 您可能必须使用本机代码将文件描述符绑定到FileDescriptor对象或FileInputStream或FileOutputStream对象。

如果您使用的是
Linux、*BSD 或 macOS,则可以使用伪文件 /dev/fd/nnn 来访问 file-descriptor nnn。


答案 2

使用 SUN JavaVM,您可以执行以下操作:

FileDescriptor fd = new FileDescriptor();
sun.misc.SharedSecrets.getJavaIOFileDescriptorAccess().set(fd,3);
FileInputStream fin = new FileInputStream(fd);