Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Linux:如何检查我的手表文件夹中的文件副本是否已完成?_Java_C_Linux_Shell - Fatal编程技术网

Java Linux:如何检查我的手表文件夹中的文件副本是否已完成?

Java Linux:如何检查我的手表文件夹中的文件副本是否已完成?,java,c,linux,shell,Java,C,Linux,Shell,我有一个文件夹,不同的用户可以在其中放置他们的文档,如pdf、tif等。 如果有任何新文件,我会每分钟检查一次这个文件夹,如果有,我会选择那个文件进行处理 但是,我不想选择这个文件,以防它仍然被复制。 在这种情况下,我会选择在未来的周期 但我面临的问题是。 那我怎样才能检查文件副本是否已在我的文件夹中完成 我已经试过以下方法了。 1) 尝试使用C程序以写模式打开文件。 但我可以在写模式下打开它,即使它仍在被复制 2) 使用lsof命令检查某个进程是否与此关联。 但对于非root用户,该命令不会给

我有一个文件夹,不同的用户可以在其中放置他们的文档,如pdf、tif等。 如果有任何新文件,我会每分钟检查一次这个文件夹,如果有,我会选择那个文件进行处理

但是,我不想选择这个文件,以防它仍然被复制。 在这种情况下,我会选择在未来的周期

但我面临的问题是。 那我怎样才能检查文件副本是否已在我的文件夹中完成

我已经试过以下方法了。 1) 尝试使用C程序以写模式打开文件。 但我可以在写模式下打开它,即使它仍在被复制

2) 使用lsof命令检查某个进程是否与此关联。 但对于非root用户,该命令不会给出结果


注意:我可能是Linux上的非root用户。

在大多数情况下,如果文件有一段时间没有被修改,那么假设拷贝已经完成就足够了。处理过去15分钟内未修改的文件:

find . -mmin +15
正确的解决方案需要所有程序执行某种类型的锁定:

您可以使用内核的功能来侦听IN_CLOSE_WRITE事件。 复制完成后,程序关闭文件句柄,从而触发此事件

在关闭时写入(+)
为写入而打开的文件已关闭

例如,有两个示例如何从shell使用它


与C一起使用的示例

您能说明哪些部分是用C、Java和shell脚本完成的吗?但这并不能告诉您为什么文件被关闭。例如,通过FTP上载文件时,连接丢失。如果您需要确切地知道整个文件已被复制,则需要使用某种方法进行沟通,例如在复制完成后重命名文件。15分钟的时间太长。