1

OS X の OS / カーネル レベルでファイル システム イベントを取得しようとしています。従わなければならない要件が 2 つあります。最初のものは、開発中のプロジェクト全体がJavaで書かれているため、Javaでこれを行うことです。2 つ目は、ドキュメントがいつ開かれたかを知る必要があることです。

Linux では inotify-java を使用しましたが、OS X では適切な同等のものを見つけることができません。また、JNA は有用なバインディングを提供しません。現在、lsof プログラムを頻繁に呼び出すことで、イベントのキャッチを回避しています。ただし、これは悪い解決策です。

助けてくれてありがとう。

4

1 に答える 1

1

OSXでdtraceを使用できますが、root権限が必要なため、システムのランタイムに入れたいものではありません。

いずれの場合も、純粋なJavaではこれを実行できません(Java APIは、下位レベルのCイントロスペクションのラッパーであり、カーネル全体で実行する場合は、rootとして実行する必要があります)。 。

プログラムが(同じシステム上の他のファイルではなく)いつファイルを開いているかを追跡したいだけの場合は、独自のSecurity Managerをインストールして一連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 に答える