加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:34:55 所属栏目:Java 来源:网络整理
导读:我正在尝试在NFS文件系统上编写在 Linux环境中运行的Java应用程序. 我注意到当我调用java.io.File.exists()时,它对ESTALE(Stale NFS文件句柄)和ENOENT(没有这样的文件或目录)都返回false.对于我的应用程序,我需要能够区分这两者. 目前我正在考虑使用JNA实现s
我正在尝试在NFS文件系统上编写在 Linux环境中运行的Java应用程序.

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

目前我正在考虑使用JNA实现stat()调用,但这似乎有点矫枉过正,需要实现整个stat结构和所有__xstat64的东西,它们似乎与平台相关.

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

解决方法

使用JNA,您实际上不必实现stat结构;你只需要分配足够大的内存来代表原生结构.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读