使用c库进行系统调用

时间:2014-07-18 14:55:02

标签: c system systems-programming

通常,系统提供位于普通程序和操作系统之间的库或API。在类Unix系统上,该API通常是C库(libc)实现的一部分,例如glibc,它为系统调用提供包装函数。函数如write(),read(),open()..用于从C程序进行系统调用。这是否意味着如果java程序必须进行系统调用,那么在最低级别它必须调用这些C库函数?如果是,那么如何... ??? < / p>

3 个答案:

答案 0 :(得分:0)

如果您真的需要,可以使用Java Native Interface(JNI)执行此操作。

要注意这不是因为佯攻; JVM通常可以做你想做的事。

JNI的一个用例是在Java中使用OpenSSL进行加密;当我测试时(这是近10年前),这曾经大大加快了。

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

答案 1 :(得分:0)

我认为您不想知道如何在Java中执行此操作,因为该问题未被标记为java问题。

所以libc是正确的方法,但是出于信息目的,在linux中,你可以使用syscall函数。 syscall函数可以使用Int 0x80信号,sysenter指令或其他东西,具体取决于平台。

Introduction to System Calls in Linux

答案 2 :(得分:0)

在Java中,这是使用native Methods完成的。这些是使用native修饰符和(与抽象方法类似)声明的方法,没有正文,其实际实现是用平台相关语言编写的,通常是C.

使用System.loadLibrary(String libraryName)可以运行时加载其他本机方法实现。