我需要从Java访问编号文件描述符-除0、1或2之外。
如何才能做到这一点?我查看了FileDescriptor该类,但没有找到用给定的文件描述符号初始化它的任何方法。
FileDescriptor
作为一个具体示例,假设Java被另一种编程语言称为子进程。文件描述符3和4由另一种语言提供,用于输入和输出。
我在Java中需要的是InputStream和OutputStream连接到这些文件描述符的对象,就像System.in,System.out和System.error都连接到文件描述符0、1和2。
InputStream
OutputStream
我正在使用Java 1.6,它应该在类似Unix的系统上运行。
经过测试的工作解决方案:
文件描述符特殊文件系统条目的答案确实将我指向以下可行的解决方案:
找出类似Unix的系统是否以及在何处具有一个特殊的文件系统,其中包含所有文件描述符的命名条目。
确保已挂载此文件系统
FreeBSD的:把fdescfs /dev/fd fdescfs rw 0 0在/etc/fstab
fdescfs /dev/fd fdescfs rw 0 0
/etc/fstab
或mount -t fdescfs null /dev/fd在shell提示符下运行(可能是sudo)
mount -t fdescfs null /dev/fd
FileInputStream("/dev/fd/3")
new FileOutputStream("/dev/fd/4")
我非常确定这不能使用纯Java来完成- 您可能必须使用本机代码将文件描述符绑定到FileDescriptor对象或FileInputStream或FileOutputStream对象。
编辑 如果使用的是Linux,* BSD或macOS,则可以使用伪文件/ dev / fd / nnn访问文件描述符nnn。