我试图在OS X上的OS / Kernel级别上获取文件系统事件。 我必须遵循2条要求。第一个是在java中执行此操作,因为我正在开发的整个项目是用java编写的。第二个是我必须找出文档打开的时间。
对于Linux我使用了inotify-java,但是我在OS X上找不到一个好的等价物。而且JNA也没有提供有用的绑定。目前我通过频繁调用lsof程序来避免捕获事件。然而,这是一个糟糕的解决方案。
感谢您的帮助。
答案 0 :(得分:1)
您可以在OSX上使用dtrace,但由于它需要root权限,因此您不希望将其放入系统的运行时。
在任何情况下,您都无法在纯Java中执行此操作(任何Java API都是一些较低级别C内省的包装器,如果您在内核范围内执行此操作,则需要完成作为根)。
如果您只想跟踪程序何时打开文件(而不是同一系统上的其他文件),那么您可以安装自己的安全管理器并实施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);
}
}