我已经在本地机器上挂载了一个NFS挂载(因此,我假设我的机器就是NFS客户机),并且托管NFS挂载的远程机器(NFS服务器)正在将一个文件写入NFS挂载。现在,在从本地计算机读取数据之前,如何使用JAVA检测远程计算机中正在写入的文件是否已关闭?
或者,有没有其他方法可以实现我想要的?
编辑:我还想提一下,我无法控制远程NFS服务器。我只能在只读模式下挂载。
发布于 2013-03-09 13:06:25
正如您所说的,您既不能控制NFS服务器,也不能控制NFS服务器上更新文件的程序,因此您可以做的事情不多。您唯一可以真正利用的事实是,当文件更新时,其修改时间也会更新。您的java客户机应该可以使用File.lastModified()来使用它。如果您的应用程序记得上次修改日期,那么您至少可以知道自上次读取以来是否有数据需要处理。这绝对不是完美的。有竞争条件等,但根据你的应用程序到底需要什么/做什么,它可能就足够了。您无法判断文件在服务器上是关闭的还是打开的。
如果文件修改显示得很慢,您也可以使用noac挂载选项进行挂载。虽然这会影响常规NFS客户端上的NFS性能,但如果您的计算机没有使用该驱动器上的大量其他NFS文件,那么它可能会对您起作用。参见"man nfs“。
顺便说一句,我看不出文件锁定会有什么帮助,因为您没有给出NFS服务器上的应用程序无论如何都会使用锁的指示。
https://stackoverflow.com/questions/13681559
复制相似问题