Java DTrace bridge на OS X - PullRequest
       4

Java DTrace bridge на OS X

1 голос
/ 25 января 2011

Я пытаюсь получить события файловой системы на уровне OS / Kernel на OS X. Есть 2 требования, которым я должен следовать.Первый заключается в том, чтобы сделать это в Java, так как весь проект, который я разрабатываю, написан на Java.Во-вторых, мне нужно выяснить, когда открывается документ.

Для Linux я использовал inotify-java, но не могу найти хороший эквивалент в OS X. Также JNA не предоставляетполезное связывание.В настоящее время я избегаю перехвата событий, часто вызывая программу lsof.Однако это плохое решение.

Спасибо за помощь.

1 Ответ

1 голос
/ 11 июля 2011

Вы можете использовать dtrace в OSX, но, поскольку ему нужны привилегии суперпользователя, это не то, что вы хотели бы поместить в среду выполнения системы.

В любом случае вы не сможете сделать это на чистой 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);
  }
}
...