一般に、システムは、汎用プログラムとオペレーティングシステムとの間に位置するライブラリまたはAPIを提供します。 Unixファミリーシステムでは、このAPIは通常、システムコール用のラッパー関数を提供するglibcなどのCライブラリ(libc)実装の一部です。 Cでは、これらのラッパー関数を使用してシステムコールを実行できます。別の言語でシステムコールを行う方法は?
答え1
ほとんどの場合、選択した言語は最終的に関連言語にマッピングされる機能(一部の種類)を提供します。システムコール。このような場合は、単に使用し、システムコールインターフェイスについてまったく考える必要はありません。実際、標準ライブラリを書かない限り、最初から低レベルの詳細について考える必要はないと思います。これは、メモリ構造に直接アクセスしてパフォーマンスを大幅に向上させることができた元のIBM PC時代とは異なりました。
つまり、直接システムコールを実行できるすべての言語を使用できます。編む予想される呼び出しルール。実際、これはすべてのバイナリ間呼び出し(ライブラリ呼び出しを含む)とは異なります(ライブラリの場合はとにかく同じ呼び出し規則で書かれる可能性が高いため、これは通常問題ではありません)。
呼び出し規則は、パラメーターと戻り値が呼び出された関数の内外に渡される方法を指定し、呼び出し規則の一部を構成します。ABI(アプリケーションバイナリインタフェース)プラットフォーム。この文脈では、「プラットフォーム」は、オペレーティングシステム、ランタイム環境、言語、コンパイラ、および設定(ソースコードレベル宣言を含む)をカバーすることができるかなり広範な用語です。
だからあなたがすべきことは他の言語で使用されている呼び出し規則に準拠した関数呼び出しを行うようにしてください。その後、そのインターフェイスを呼び出すだけです。アセンブラを使用すると、これは簡単です。なぜなら、BASICやPerlのような極端なものを使用すると、外国の呼び出し規則に従うのが難しいでしょう。なぜなら、これらの言語にはこの概念がほとんど不足しているからです。
代替(または特定の)呼び出し規則を使用するためのコードを書く正確な方法は、その言語(およびおそらくコンパイラ)によって大きく異なり、一般的に答えるには広すぎます。もちろん、どの呼び出し規則に従うべきかを知る必要があります。