it-swarm-es.com

Invocar syscalls de Java=

¿Hay alguna manera de invocar a SysCalls directamente de Java, o es necesario llamar primero un método nativo?

12
santiago.basulto

Debe usar un método nativo, pero no necesita implementarlo usted mismo. Java tiene una variación en JNI llamada JAN (acceso nativo de JANA (Java) , que le permite acceder a las bibliotecas compartidas directamente sin necesidad de una interfaz JNI envuelta alrededor de ellas, por lo que puede usar que para interactuar directamente con GLIBC:

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");
    }
}
11
Michael Mrozek

Es necesario usar un método nativo, o una biblioteca que lo hace para usted.

2
bmargulies