Вопрос по java, unix, posix – Есть ли в Java библиотека функций Unix?

12

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

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

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

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

Ваш Ответ

4   ответа
-3

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

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

3

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

Разработчики продолжили создаватьJNR-POSIX

-2

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

16

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

Лично мне очень нравитсяЮНА, Взгляните на этот пример моего, картирование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);
    }
}

Похожие вопросы