java - JNotify 无法识别 Linux 系统更改的文件

标签 java file interrupt jnotify

我在 Linux 系统 (arm7) 上的一个项目中使用 JNotify。 而且效果很好。如果我更改、重命名、删除或创建文件,它会引发中断。 但我希望使用 JNotify 来获取 Linux 系统是否自行更改文件的通知。 我正在使用 BeagleBone(嵌入式 Linux 系统)。有一个名为 value 的文件,其中包含 InputPin 的状态(高、低)。但是,如果这个文件被系统更改,JNotify 不起作用...如果我自己更改文件,一切都会好的... 有谁知道为什么在第一种情况下没有识别出更改。 Linux似乎使用一种特殊的方式来写入文件...但我不知道如何... 但如果该文件发生更改,则需要中断我的主循环。 或者还有其他解决方案吗?

谢谢

最佳答案

JNotify 依赖于文件系统中的事件。对于 Linux,它使用 inotify 系统调用(这实际上是它名字的灵感来源)。 inotify 仅适用于真实文件,您所描述的文件是一个虚拟文件,不存在于磁盘上,不是一种存储信息的方式,而是一种访问系统信息并有时更改它的简单方法)。

另一种解决方案是创建一个采样线程来检查文件、 sleep 并再次检查文件。 由于您只关心特定文件,因此这非常简单。

虽然它可能感觉太昂贵,但在直接处理硬件时轮询实际上很常见。 由于该文件实际上并不是真正的文件,因此读取它实际上比读取文件更快。

关于java - JNotify 无法识别 Linux 系统更改的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17817482/

相关文章:

java - Weblogic 10.3.4 上的 @PostConstruct 注释未被调用

Java:使用静态初始化 block 将类注册到全局静态注册表

java - 将序列化的 Java 对象转换为 C# 对象

Spring MVC 多部分文件 - NoSuchMethodError

c - 如何计算 ADC 读数的平均值?

arduino - 延迟 Arduino ISR 中的限位开关去抖动

java - 匿名内部类 - 表达式的非法开始

Android 文件选择器将音频文件重定向到/外部

c - 如何将文本文件中的矩阵分配给 C 中的变量?

linux - 多个驱动程序可以注册来处理Linux中的同一个设备吗