1

我正在尝试在 OS X 上获取 OS / 内核级别的文​​件系统事件。我必须遵循 2 个要求。第一个是在 java 中执行此操作,因为我正在开发的整个项目都是用 java 编写的。第二个是我必须找出文档何时打开。

对于 Linux,我使用了 inotify-java,但在 OS X 上找不到很好的等价物。JNA 也没有提供有用的绑定。目前,我通过频繁调用 lsof 程序来避免捕获事件。然而,这是一个糟糕的解决方案。

谢谢您的帮助。

4

1 回答 1

1

您可以在 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);
  }
}
于 2011-07-11T19:10:39.700 回答