2014-07-18 3 views
1

일반적으로 시스템은 일반 프로그램과 운영 체제 사이에있는 라이브러리 또는 API를 제공합니다. 유닉스 계열 시스템에서이 API는 대개 glibc와 같이 시스템 호출을위한 래퍼 (wrapper) 함수를 제공하는 C 라이브러리 (libc)의 구현의 일부입니다. write(), read(), open C 프로그램에서 시스템 호출을하는 데 사용됩니다. 즉, Java 프로그램이 시스템 호출을 한 다음 가장 낮은 수준에서 이러한 C 라이브러리 함수를 호출해야한다면? 그렇다면 어떻게 .. ???c 라이브러리를 사용하는 시스템 호출

+2

귀하의 VM 구현은 – Djole

+0

입니다. 모든 언어 런타임 구현은 운영 체제 호출을해야합니다. C 런타임 라이브러리를 사용하여이를 수행 할 수 있습니다. 그건 사실 일반적으로 필요한 것은 아닙니다. 리눅스 시스템에서 –

+0

을 사용하면'strace '명령을 실행하고 수행중인 시스템 호출을 모니터링 할 수 있습니다. Windows 용 아날로그 도구는'procmon'입니다. 예를 들어 I/O를 수행 할 때마다 해당 syscalls가 참여하게됩니다. – Sigismondo

답변

0

정말로 필요한 경우 Java Native Interface (JNI)로 할 수 있습니다.

마음의 두려움에주의하지 마십시오. JVM은 보통 당신이 원하는 것을 할 수 있습니다.

JNI의 하나의 유스 케이스는 Java의 암호 용 OpenSSL을 사용합니다. 이전에 테스트 한 결과 상당히 빨랐습니다 (거의 10 년 전이었습니다).

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

0

난 당신이 질문 자바 질문으로 태그되지 않기 때문에 자바에서 작업을 수행하는 방법을 알고 싶지 않아 가정합니다.

libc가 올바른 방법이지만, 정보를 얻기 위해 linux에서 syscall 기능을 사용할 수 있습니다. syscall 함수는 플랫폼에 따라 Int 0x80 신호, sysenter 명령 또는 다른 것을 사용할 수 있습니다.

Introduction to System Calls in Linux

0

자바에서, 이것은 native Methods을 사용하여 수행됩니다. 다음은 native 수정 선언 방법과 (유사에 추상적 인 방법) 실제 구현 플랫폼 의존의 언어로 작성 일반적으로 C.

추가 네이티브 메소드 구현 될 수있다 런타임 System.loadLibrary(String libraryName)를 사용하여로드없는 ​​몸이다.

관련 문제