জাভা থেকে ডাকা Syscalls


12

সরাসরি জাভা থেকে সিস্কলগুলি আহ্বানের কোনও উপায় আছে, বা প্রথমে কোনও নেটিভ পদ্ধতিতে কল করা প্রয়োজন?

উত্তর:


11

আপনি একটি নেটিভ পদ্ধতি ব্যবহার করতে হবে, কিন্তু আপনি তা নিজেকে বাস্তবায়ন করতে প্রয়োজন হবে না। জাভা নামক 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");
    }
}

আকর্ষণীয়, সংখ্যার পরিবর্তে ফাংশন নাম ব্যবহার করা কি সম্ভব?
maxschlepzig

1
syscallইন্টারফেসে @ ম্যাক্স ? না, syscallসি এর মতো ঠিক মতো কল করার জন্য যথাযথ কলটি উপস্থাপন করতে পূর্ণসংখ্যা নেয় takes একটি গুচ্ছ আছে #defineমধ্যে গুলি /usr/include/asm/unistd.hমত, #define __NR_mkdir 39এটা সি ফাংশন কলিং মানুষের জন্য সহজ করতে, কিন্তু আমি সেখানে স্বয়ংক্রিয়ভাবে জাভা মধ্যে যারা আমদানি করতে কোন উপায় আছে বলে মনে করি না আপনি তাদের সব নিজেকে সংজ্ঞায়িত করতে চাই
মাইকেল Mrozek

2
দয়া করে সাবধান হন - লিনাক্সে x86 এবং x86-64 এর সংখ্যাগুলি পৃথক।
ম্যাকিয়েজ পাইচোতকা

@ ম্যাসিজেজ গুড পয়েন্ট, উত্তরে একটি সতর্কতা যুক্ত করেছে
মাইকেল মরোজেক

দুর্দান্ত উত্তর! আপনার সাহায্যের জন্য ধন্যবাদ. এখান থেকে আমার আর একটি প্রশ্ন আছে। আমি এক মিনিটের মধ্যে এটি জিজ্ঞাসা করব।
সান্টিয়াগো.বাসুল্টো

2

একটি নেটিভ পদ্ধতি বা আপনার জন্য এটি করে এমন একটি গ্রন্থাগার ব্যবহার করা প্রয়োজন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.