일반적으로 시스템은 일반 프로그램과 운영 체제 사이에 위치하는 라이브러리 또는 API를 제공합니다. Unix 계열 시스템에서 이 API는 일반적으로 시스템 호출을 위한 래퍼 함수를 제공하는 glibc와 같은 C 라이브러리(libc) 구현의 일부입니다. C에서는 이러한 래퍼 함수를 사용하여 시스템 호출을 수행할 수 있습니다. 다른 언어로 시스템 호출을 하는 방법은 무엇입니까?
답변1
대부분의 경우 선택한 언어는 궁극적으로 관련 언어에 매핑되는 기능(일부 유형)을 제공합니다.시스템 호출. 이러한 경우에는 그냥 사용하고 시스템 호출 인터페이스에 대해 전혀 생각할 필요가 없습니다. 사실, 표준 라이브러리를 작성하지 않는 이상 처음부터 낮은 수준의 세부 사항에 대해 생각할 필요는 없다고 생각합니다. 이는 메모리 구조에 직접 액세스하여 성능을 크게 향상시킬 수 있었던 원래 IBM PC 시대와는 달랐습니다(그때에도 이식성이 심각하게 제한되어 차선책으로 간주되었습니다).
즉, 직접 시스템 호출을 수행할 수 있는 모든 언어를 사용할 수 있습니다.본뜨다예상되는호출 규칙. 실제로 이는 모든 바이너리 간 호출(라이브러리 호출 포함)과 다르지 않습니다(라이브러리의 경우 어쨌든 동일한 호출 규칙으로 작성될 가능성이 높기 때문에 이는 일반적으로 문제가 되지 않습니다).
호출 규칙은 매개 변수와 반환 값이 호출된 함수 안팎으로 전달되는 방식을 지정하고 호출 규칙의 일부를 구성합니다.ABI(애플리케이션 바이너리 인터페이스)플랫폼. 이 맥락에서 "플랫폼"은 운영 체제, 런타임 환경, 언어, 컴파일러 및 설정(소스 코드 수준 선언 포함)을 포괄할 수 있는 상당히 광범위한 용어입니다.
그래서 당신이 해야 할 일은다른 언어에서 사용된 호출 규칙을 준수하는 함수 호출을 하도록 하세요.그런 다음 해당 인터페이스를 호출하면 됩니다. 어셈블러를 사용한다면 이는 쉽습니다. 왜냐하면 BASIC이나 Perl과 같은 극단적인 것을 사용한다면 외국 호출 규칙을 준수하는 데 어려움을 겪을 것이기 때문입니다. 왜냐하면 이들 언어에는 이 개념이 거의 부족하기 때문입니다.
대체(또는 특정) 호출 규칙을 사용하기 위해 코드를 작성하는 정확한 방법은 해당 언어(및 아마도 컴파일러)에 따라 크게 달라지며 일반적으로 답변하기에는 너무 광범위합니다. 물론 어떤 호출 규칙을 준수해야 하는지 알아야 합니다.