当前位置: 首页 > 面试题库 >

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

拓拔俊德
2023-03-14
问题内容

我需要从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,用您的操作系统路径替换)

问题答案:

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

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



 类似资料:
  • 文件描述符 Linux很重要的设计思想就是一切皆文件,网络是文件,键盘等外设也是文件,很神奇吧?于是所有资源都有了统一的接口,开发者可以像写文件那样通过网络传输数据,我们也可以通过/proc/的文件看到进程的资源使用情况。 内核给每个访问的文件分配了文件描述符(File Descriptor),它本质是一个非负整数,在打开或新建文件时返回,以后读写文件都要通过这个文件描述符了。 应用 我们想想操作

  • 文件描述符接口 函数 int  fd_new (void)   分配文件描述符   struct dfs_fd *  fd_get (int fd)   获取文件描述结构   void  fd_put (struct dfs_fd *fd)   放置文件描述符   int  fd_is_open (const char *pathname)   判断文件是否已被打开   int  select (

  • 我正在尝试在AWS Lambda中运行vertx WebClient。AWS Lambda最多有1024个文件描述符,并且不可调整。我很难找到到底是什么用完了我所有的文件描述符。我只使用vertx的WebClient,不运行任何verticle。这是我的共享WebClient: 此客户端在lambda调用之间重用,并且从不关闭。 我如何使用它: 我有45k-65k请求发送。我得到的是: 当我在本地

  • 问题内容: 有没有办法在原始文件描述符而不是FILE *上执行ftell()的操作(返回文件中的当前位置)?我认为应该有,因为您可以使用lseek()查找原始文件描述符。 我知道我可以使用fdopen()创建与文件描述符相对应的FILE *,但我宁愿不这样做。 问题答案: 只需使用:

  • 当使用了大量虚拟主机,而且每个主机又使用了不同的日志文件时,Apache可能会遭遇文件描述符(有时也称为文件句柄)耗尽的困境。Apache使用的文件描述符总数如下:每个不同的错误日志文件一个、每个其他日志文件指令一个、再加10-20个作为内部使用。Unix操作系统限制了每个进程可以使用的文件描述符数量。典型上限是64个,但可以进行扩充,直至到达一个很大的硬件限制为止(hard-limit)。 尽管

  • 处理文件描述符 尽管很不像,但是在大多操作系统中,标准输入输出流 stdin 和 stdout 虽然叫做「流」,但它们都有文件的接口。我们同样也会将它们实现成为文件。 但是不用担心,作为文件的许多功能,stdin 和 stdout 都不会支持。我们只需要为其实现最简单的读写接口。 进程打开的文件 操作系统需要为进程维护一个进程打开的文件清单。其中,一定存在的是 stdin stdout 和 std