gpt4 book ai didi

java - 在 Java 中区分 ESTALE 和 ENOENT 的最佳方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:11 25 4
gpt4 key购买 nike

我正在尝试编写在 NFS 文件系统上的 Linux 环境中运行的 Java 应用程序。

我注意到,当我调用 java.io.File.exists() 时,它对 ESTALE(Stale NFS 文件句柄)和 ENOENT 都返回 false (没有这样的文件或目录)。对于我的应用程序,我需要能够区分两者。

目前我正在考虑使用 JNA 实现 stat() 调用,但这似乎有点矫枉过正,因为必须实现整个统计结构和所有 __xstat64看起来非常依赖平台的东西。

有没有一种简单的方法可以在像 File.exists() 这样的 Java 调用之后简单地获取底层的 errno 或任何其他解决这个问题的想法?

最佳答案

使用 JNA,您实际上不必实现 stat 结构;您只需要为其分配足够大的内存以表示 native 结构。

然后您可以调用 Native.getLastError() 来检索 errno 值。

Pointer fake_stat = new Memory(2048); // big enough
if (clib.stat(filename, fake_stat) != 0) {
int errno = Native.getLastError();
...
}

关于java - 在 Java 中区分 ESTALE 和 ENOENT 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16834293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com