我正在尝试在 OS X 上获取 OS / 内核级别的文件系统事件。我必须遵循 2 个要求。第一个是在 java 中执行此操作,因为我正在开发的整个项目都是用 java 编写的。第二个是我必须找出文档何时打开。
对于 Linux,我使用了 inotify-java,但在 OS X 上找不到很好的等价物。JNA 也没有提供有用的绑定。目前,我通过频繁调用 lsof 程序来避免捕获事件。然而,这是一个糟糕的解决方案。
谢谢您的帮助。
您可以在 OSX 上使用 dtrace,但由于它需要 root 权限,因此您不想将其放入系统的运行时。
无论如何,您将无法在纯 Java 中执行此操作(任何 Java API 都将是一些较低级别的 C 内省的包装器,如果您在内核范围内执行此操作,则需要以 root 身份完成) .
如果您只想跟踪程序何时打开文件(而不是同一系统上的其他文件),那么您可以安装自己的安全管理器并实施checkRead()
一系列方法,这应该让您了解何时发生访问。
import java.io.*;
public class Demo {
public static void main(String args[]) throws Exception {
System.setSecurityManager(new Sniffer());
File f = new File("/tmp/file");
new FileInputStream(f);
}
}
class Sniffer extends SecurityManager {
public void checkRead(String name) {
System.out.println("Opening " + name);
}
}