2011-01-25 73 views
1

我試圖在OS X上的OS /內核級別上抓取文件系統事件。 我必須遵循2個要求。第一個是在java中完成這項工作,因爲我正在開發的整個項目都是用java編寫的。第二個是我必須找出何時打開文檔。OS X上的Java DTrace橋接

對於Linux我使用了inotify-java,但是我在OS X上找不到一個好的等價物。另外JNA也沒有提供有用的綁定。目前我通過頻繁地調用lsof程序來避免捕獲事件。然而,這是一個不好的解決方案。

感謝您的幫助。

回答

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); 
    } 
}