Как создать файл через JNAJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как создать файл через JNA

Сообщение Anonymous »

В обновлении Java 25 мы удаляем часть кода, который использует отражение способом, который вскоре будет запрещен. Вместо этого мы рассматриваем использование JNA. Мне нужен доступ к дескриптору файла (типа unix), и я решил открыть("some_path",O_CREAT|O_RDWR) , сделать все, что мне нужно, с дескриптором файла, а затем вместо этого открыть тот же путь с помощью File.
Проблема в том, что я получаю ошибку 2 (нет такого файла или каталога).

Если я сначала создам файл с помощью

Код: Выделить всё

var f = new File("some_path");
f.createNewFile();
int fd = JNALib.open("some_path", O_CREAT|O_RDWR);
Тогда это прекрасно работает. Я не понимаю, почему первый вариант не работает.
Mac OS X, ARM Mac. JNA 5.18.1
Код:

Код: Выделить всё

    @Test
public void testSOOpenFile() throws Exception {

String tmpFile = "dummy-file.tst";
var relPath  = Paths.get("").toAbsolutePath();
Path file = Path.of(relPath + "/" + tmpFile);
System.out.println("Creating " + file);
int fd = JNALibMinimal.open(file.toString(), O_CREAT | O_RDWR);
if (fd < 0 ) {
System.out.println("JNALib failed to open with error code " + JNALib.getLastError());
} else {
System.out.println("JNALib successfully opened " + fd);
}

}

Код: Выделить всё

public class JNALibMinimal {

static {
Native.register(Platform.C_LIBRARY_NAME);
}

public static native int open(String pathName, int flags);
public static native int open(String pathName, int flags, int mode);
}
ОБНОВЛЕНИЕ
Я (наконец-то) понял проблему, и это была (не редкость) CBtK (хрень за клавиатурой). Я слишком долго был вдали от программирования на языке C. Проблема заключалась в том, что Linux и Darwin на самом деле имеют разные значения символов O_RDWR и O_CREAT. Как только я использовал значения Дарвина, файл был создан нормально.

Подробнее здесь: https://stackoverflow.com/questions/798 ... hrough-jna
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»