一尘不染

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

java

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

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

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

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

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

经过测试的工作解决方案:

文件描述符特殊文件系统条目的答案确实将我指向以下可行的解决方案:

  1. 找出类似Unix的系统是否以及在何处具有一个特殊的文件系统,其中包含所有文件描述符的命名条目。

    • 我正在使用FreeBSD,其中fdescfs(5)是执行此操作的文件系统。在Linux下会是procfs。
    • 确保已挂载此文件系统

    • FreeBSD的:把fdescfs /dev/fd fdescfs rw 0 0/etc/fstab

mount -t fdescfs null /dev/fd在shell提示符下运行(可能是sudo)

  1. 使用new FileInputStream("/dev/fd/3")new FileOutputStream("/dev/fd/4")获取连接到文件描述符的流(路径用于FreeBSD,用您的操作系统路径替换)

阅读 233

收藏
2020-12-03

共1个答案

一尘不染

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

编辑
如果使用的是Linux,* BSD或macOS,则可以使用伪文件/ dev / fd / nnn访问文件描述符nnn。

2020-12-03