Есть ли Java-библиотека функций Unix?

Я ищу библиотеку Java для взаимодействия со стандартными функциями Unix, то есть stat(), getpwuid(), readlink().

Раньше он существовал и назывался javaunix. Он был выпущен еще в 2000 году. См. это объявление. Но страницы проекта больше нет.

Есть ли современная замена этим типам функций в Java сегодня? Можно сделать системный вызов /bin/ls -l и проанализировать вывод или написать собственный метод JNI, но эти подходы требуют больше работы, чем простое использование старой библиотеки javaunix.

Пояснение. Чтобы узнать владельца файла из программы на C, она должна вызвать stat(), который дает UID владельца, а затем использовать getpwuid(), чтобы получить имя учетной записи из UID. В Java это можно сделать с помощью специального метода JNI или библиотеки javaunix, которая использует JNI.


person Kevin Panko    schedule 06.07.2009    source источник


Ответы (4)


Я знаю два интересных проекта:

  • posix для Java (на основе JNI) [получено из Jython]
  • jna-posix (на основе JNA) [получено из JRuby]

Лично мне очень нравится JNA. Взгляните на мой пример, отображающий link(2):

import com.sun.jna.Library;
import com.sun.jna.Native;

class Link {

    private static final C c =
        (C) Native.loadLibrary("c", C.class);

    private static interface C extends Library {

        /** see man 2 link */
        public int link(String oldpath, String newpath);
    }

    @Override
    protected void hardLink(String from, String to) {
        c.link(to, from);
    }
}
person dfa    schedule 06.07.2009

Насколько мне известно, в настоящее время JNA-POSIX находится в застое.

Разработчики создали JNR-POSIX.

person kervin    schedule 14.11.2014

Я был бы удивлен, увидев его, учитывая, что он почти обязательно будет зависеть от платформы. Java не лучший инструмент для этой работы. Но вы, безусловно, можете подключиться через JNI или обратиться к внешним программам, если вы настаиваете. Или, возможно, посмотрите на Groovy, который, как я понимаю, достаточно хорош для сценариев оболочки, хотя у меня нет личного опыта с ним.

person Rob H    schedule 06.07.2009

Я не знаю ни одной библиотеки с функциями Unix.

я считаю, что для большинства функций вы можете использовать стандартный API Java, чтобы делать то, что вы хотите. например, нет необходимости использовать команду ls для чтения файлов какого-либо каталога. но в некоторых конкретных случаях, например stat (чтобы узнать, является ли файл ссылкой), вы должны использовать JNI.

person cd1    schedule 06.07.2009