Есть ли библиотека Java функций Unix?
Я ищу библиотеку Java для взаимодействия со стандартными функциями Unix, т.е. stat()
, getpwuid()
, readlink()
.
Это существовало и называлось javaunix
. Он был выпущен еще в 2000 году. См. Это объявление . Но страница проекта теперь отсутствует.
Есть ли какая-либо современная замена для этих типов функций в Java сегодня? Можно сделать системный вызов /bin/ls -l
и проанализировать вывод или написать собственный JNI-метод, но эти подходы более эффективны, чем просто использовать старую библиотеку javaunix
.
Уточнение -. Чтобы узнать владельца файла, из программы на C, он должен вызвать stat()
, который дает UID владельца, а затем использовать getpwuid()
, чтобы получить имя учетной записи из UID. В Java это можно сделать с помощью настраиваемого метода JNI или библиотеки javaunix
, которая использует JNI.
Ответы
Ответ 1
Мне известно о двух интересных проектах:
Лично мне очень нравится 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);
}
}
Ответ 2
В настоящее время JNA-POSIX застаивается, насколько мне известно.
Разработчики продолжали создавать JNR-POSIX
Ответ 3
Я был бы удивлен, увидев его, учитывая, что он почти обязательно будет специфичным для платформы. Java - не лучший инструмент для этой работы. Но вы, безусловно, можете подключиться через JNI или обратиться к внешним программам, если настаиваете. Или, возможно, посмотрите на Groovy, который, как я понимаю, достаточно хорош для сценариев оболочки, хотя у меня нет личного опыта с ним.
Ответ 4
Я не знаю никакой библиотеки с функциями Unix.
для большинства функций, я считаю, вы можете использовать стандартный Java API, чтобы делать то, что хотите. например, нет необходимости использовать команду ls
для чтения файлов какой-либо директории. но в некоторых конкретных случаях, таких как stat
(чтобы узнать, является ли файл ссылкой), вы должны использовать JNI.