有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

OS X上的macos Java DTrace桥

我试图在OS X上获取OS/内核级别的文件系统事件。 我必须遵守两个要求。第一种方法是用java实现,因为我开发的整个项目都是用java编写的。第二个问题是,我必须知道文档何时打开

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

谢谢你的帮助


共 (1) 个答案

  1. # 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);
      }
    }