java - 哪些操作系统支持在 Java 中监视 native (类似 inotify 的)文件

标签 java linux java-8 raspberry-pi inotify

java.nio.file.WatchService 的 JavaDoc 状态;

The implementation ... is intended to map directly on to the native file event notification facility where available, or to use a primitive mechanism, such as polling, when a native facility is not available.

我认为这意味着它会在可能时尝试一种轻量级的本地机制(类似于 Linux 上的 inotify),如果不能则进行轮询。

对吗?

哪些操作系统可能或不太可能提供这样的功能? Linux 的发行版级别真的很有用,或者我可以假设如果 JVM 在 *unix 上运行,它会受到支持吗?

最佳答案

这可能是一条评论,但它太大了,不能这样发布......

我正在查看 jdk-9 来源(也可以在 jdk-8 存储库中轻松搜索),但这里有一些与您的问题评论相关的内容:

   /**
     * Linux implementation of WatchService based on inotify.
     *
     * In summary a background thread polls inotify plus a socket used for the wakeup
     * mechanism. Requests to add or remove a watch, or close the watch service,
     * cause the thread to wakeup and process the request. Events are processed
     * by the thread which causes it to signal/queue the corresponding watch keys.
     */

 class LinuxWatchService  extends AbstractWatchService

对于 Windows:

/*
 * Win32 implementation of WatchService based on ReadDirectoryChangesW.
 */

class WindowsWatchService extends AbstractWatchService

等等..你可以在下面找到所有可用的实现:

 jdk/src/java.base/{windows|unix|solaris|linux...}/classes/sun/nio/fs/

由于操作系统实际支持此功能,因此您似乎需要查看实际的发行版。

关于java - 哪些操作系统支持在 Java 中监视 native (类似 inotify 的)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43141838/

相关文章:

java - jar 和“找不到类定义”错误

php 执行 shell 命令仅在大量使用模式下提供随机输出

android-studio - 调用需要非 android 模块中的 api 级别

java - 以 Java 8 风格重构 if-else if 链

java - 收集以映射跳过空键/值

java - 如果我将 long 数据类型分配给 float 数据类型,为什么会出现舍入错误?

java - 在组件扫描中添加属性

linux - 如何编写shell脚本在系统登录时运行程序?

c - 我们如何在没有getch()的情况下使用linux中的系统调用执行密码提示操作(对我们输入的每个字符立即显示*)?

java - 在特定时间后中断迭代的最佳方法是什么?