如何使用JNI在Java程序中调用getpid()C库函数?

时间:2013-08-10 10:17:18

标签: java-native-interface

我是JAVA Programming& JNI。 如何使用JNI在Java程序中调用getpid()C库函数? 我经历了以下帖子 How can a Java program get its own process ID? 但无法运行程序。 提前致谢

我写过以下程序

public class ProcessId  
 {  
    public static void main(String[] args) {  
            CLibrary clib = (CLibrary) Native.loadLibrary("c",Library.class);    
            clib.getpid();  
            System.out.println("Process Id is "+getpid());  
        }  
} 

我收到以下错误

1)图书馆无法解析为类型
3)对于ProcessId类型

,方法getpid()未定义

上面提到的帖子谈论platform.jar文件。我从http://grepcode.com/snapshot/repo1.maven.org/maven2/net.java.dev.jna/platform/3.4.0下载了一个,并包含在项目库中。但它仍然没有成功..

1 个答案:

答案 0 :(得分:1)

Mat&托马斯,谢谢你的帮助.. 我设法从Java调用C库函数.. 我采取了以下步骤 步骤1)从GitHub下载jna.jar。 https://github.com/twall/jna
步骤2)在项目库中添加了上面的jar文件 步骤3)编写以下代码

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Simple example of native library declaration and usage. */
public class ProcessId {  
    public interface CLibrary extends Library {    
        CLibrary INSTANCE = (CLibrary) Native.loadLibrary(  
            (Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);  
        void printf(String format, Object... args);  
        int getpid();  
    }  

    public static void main(String[] args) {  
        CLibrary.INSTANCE.printf("Hello, World\n");  

        System.out.println("My Process id is "+ CLibrary.INSTANCE.getpid());  

        for (int i = 0; i < args.length; i++) {  
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);  
        }  
    }  
}  

它的工作!!!