Java 远程NFS服务器中当前正在写入的文件的NFS客户端锁定

Java 远程NFS服务器中当前正在写入的文件的NFS客户端锁定,java,linux,linux-kernel,nfs,nfsclient,Java,Linux,Linux Kernel,Nfs,Nfsclient,我已经在本地机器上挂载了一个NFS挂载(因此,我假设我的机器是NFS客户机),并且承载NFS挂载的远程机器(NFS服务器)正在NFS挂载中写入一个文件。现在,在我从本地机器读取之前,如何使用JAVA检测远程机器中写入的文件已关闭 或者,有没有其他方法来实现我想要的 编辑:我还想指出,我无法控制远程NFS服务器。我只能以只读模式挂载。正如您所说的,您无法控制NFS服务器,也无法控制NFS服务器上更新文件的程序,因此您所能做的不多。你唯一能真正利用的是,当一个文件被更新时,它的修改时间被更新。您的j

我已经在本地机器上挂载了一个NFS挂载(因此,我假设我的机器是NFS客户机),并且承载NFS挂载的远程机器(NFS服务器)正在NFS挂载中写入一个文件。现在,在我从本地机器读取之前,如何使用JAVA检测远程机器中写入的文件已关闭

或者,有没有其他方法来实现我想要的


编辑:我还想指出,我无法控制远程NFS服务器。我只能以只读模式挂载。

正如您所说的,您无法控制NFS服务器,也无法控制NFS服务器上更新文件的程序,因此您所能做的不多。你唯一能真正利用的是,当一个文件被更新时,它的修改时间被更新。您的java客户机应该可以使用File.lastModified()使用该文件。如果您的应用程序记住了上次修改日期,那么您至少可以知道自上次读取以来是否有数据要处理。这绝对不是完美的。存在竞争条件等,但取决于应用程序的具体需求/用途,这可能就足够了。您无法判断该文件在服务器上是关闭还是打开

如果文件修改显示缓慢,还可以使用noac装载选项进行装载。虽然这会影响常规NFS客户端上的NFS性能,但如果您的计算机未在该驱动器上使用大量其他NFS文件,则可能会对您起作用。见“人”


顺便说一句,我看不出文件锁定会有什么帮助,因为您没有指出NFS服务器上的应用程序是否使用了锁。

直到远程系统关闭文件并刷新数据,您将要读取旧数据。Petesh:我需要一种方法来确保在NFS客户端读取之前已关闭要写入的文件。如何做到这一点?您可以使用文件锁定来尝试强制执行命令,但是,由于它是一个远程文件协议,因此无法保证它的一致性。问题:可以从客户端启用文件锁定吗?因为,我只能以只读方式访问NFS装载。