Sistem çağrılarını doğrudan Java'dan çağırmanın bir yolu var mı, yoksa önce yerel bir yöntemi çağırmak gerekli mi?
Sistem çağrılarını doğrudan Java'dan çağırmanın bir yolu var mı, yoksa önce yerel bir yöntemi çağırmak gerekli mi?
Yanıtlar:
Yerel bir yöntem kullanmanız gerekir, ancak bunu kendiniz uygulamanız gerekmez. Java, JNA (JNA (Java Native Access)) adında bir varyasyona sahiptir ;
import com.sun.jna.Library;
import com.sun.jna.Native;
public class Test {
public interface CStdLib extends Library {
int syscall(int number, Object... args);
}
public static void main(String[] args) {
CStdLib c = (CStdLib)Native.loadLibrary("c", CStdLib.class);
// WARNING: These syscall numbers are for x86 only
System.out.println("PID: " + c.syscall(20));
System.out.println("UID: " + c.syscall(24));
System.out.println("GID: " + c.syscall(47));
c.syscall(39, "/tmp/create-new-directory-here");
}
}
syscall
Arayüzde mi? Hayır, syscall
C tarafında olduğu gibi yapmak için uygun çağrıyı temsil eden bir tamsayı alır. C işlevini çağıran insanlar için kolaylaştırmak gibi bir sürü #define
s var , ancak bunları otomatik olarak Java'ya aktarmanın bir yolu olduğunu düşünmüyorum, hepsini kendiniz tanımlamanız gerekir/usr/include/asm/unistd.h
#define __NR_mkdir 39
Yerel bir yöntem veya sizin için bunu yapan bir kütüphane kullanmak gerekir.