वहाँ जावा से सीधे syscalls आह्वान करने का एक तरीका है, या पहले एक देशी विधि को कॉल करना आवश्यक है?
वहाँ जावा से सीधे syscalls आह्वान करने का एक तरीका है, या पहले एक देशी विधि को कॉल करना आवश्यक है?
जवाबों:
आपको एक मूल विधि का उपयोग करने की आवश्यकता है, लेकिन आपको इसे स्वयं लागू करने की आवश्यकता नहीं है। जावा में JNI पर एक भिन्नता है, जिसे JNA (जावा नेटिव एक्सेस) कहा जाता है , जो आपको उनके आसपास लिपटे एक JNI इंटरफ़ेस की आवश्यकता के बिना साझा किए गए पुस्तकालयों को सीधे एक्सेस करने देता है, इसलिए आप इसका उपयोग सीधे 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");
}
}
syscall
इंटरफ़ेस में @ max ? नहीं, syscall
C पक्ष की तरह, उपयुक्त कॉल का प्रतिनिधित्व करने के लिए एक पूर्णांक लेता है। का एक समूह रहे हैं #define
में /usr/include/asm/unistd.h
की तरह, #define __NR_mkdir 39
यह सी समारोह बुला लोगों के लिए आसान बनाने के लिए, लेकिन मैं वहाँ स्वचालित रूप से जावा में आयात करने के लिए कोई रास्ता नहीं है नहीं लगता है, आप उन सभी अपने आप को परिभाषित करने के लिए होगा
एक देशी विधि, या एक पुस्तकालय का उपयोग करना आवश्यक है जो आपके लिए ऐसा करता है।