Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OSX上的JavaDTrace桥_Java_Macos_Dtrace - Fatal编程技术网

OSX上的JavaDTrace桥

OSX上的JavaDTrace桥,java,macos,dtrace,Java,Macos,Dtrace,我试图在OS X上获取OS/内核级别的文件系统事件。 我必须遵守两个要求。第一种方法是用java实现,因为我开发的整个项目都是用java编写的。第二个问题是,我必须知道文档何时打开 对于Linux,我使用了inotify java,但在OSX上找不到一个好的等价物。此外,JNA也没有提供有用的绑定。目前,我通过频繁调用lsof程序来避免捕捉事件。然而,这是一个糟糕的解决方案 感谢您的帮助。您可以在OSX上使用dtrace,但由于它需要root权限,因此您不希望将其放入系统的运行时中 在任何情况下

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

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


感谢您的帮助。

您可以在OSX上使用dtrace,但由于它需要root权限,因此您不希望将其放入系统的运行时中

在任何情况下,您都无法在纯Java中实现这一点(任何JavaAPI都是一些较低级别的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);
  }
}

您可以在OSX上使用dtrace,但由于它需要root权限,因此您不希望将其放入系统的运行时中

在任何情况下,您都无法在纯Java中实现这一点(任何JavaAPI都是一些较低级别的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);
  }
}