Linuxのシステムコールとは何ですか?例でどのように機能しますか

What Is System Call Linux



システムコールは、プロセスがLinuxカーネルと通信できるようにする関数です。これは、コンピュータプログラムがオペレーティングシステムのカーネルからファシリティを注文するためのプログラム的な方法にすぎません。システムコールは、API(Application Programming Interface)を介してオペレーティングシステムのリソースをユーザープログラムに公開します。システムコールはカーネルフレームワークにのみアクセスできます。リソースを必要とするすべてのサービスには、システムコールが必要です。

Linuxカーネルは、最も可能性の低い段階でデバイスにロードして動作するプロプライエタリソフトウェアです。その仕事は、キーボード、ディスクドライブ、ネットワークイベントから、さまざまなプログラムを同時に実行するためのタイムスライスの提供まで、マシンで発生するすべてのことを整理することです。ソフトウェアとハ​​ードウェアを分離すると、保護と信頼性を向上させる安全なバブルが作成されます。特権のないアプリケーションは他のプログラムのストレージに到達できず、1つが失敗した場合、カーネルはプロセスを一時停止して、システム全体に損傷を与えないようにします。







ウェーハシンラッパー:

Linuxシステムコールは、特定のプログラムではカーネルに明示的にレンダリングされません。ほとんどすべてのプログラムは基本的なCライブラリを使用し、Linuxシステムコールに対して軽量でありながら不可欠なラッパーを提供します。次に、リポジトリは、機能パラメータが適切なプロセッサレジスタに変換されていることを確認した後、付随するLinuxマシン呼び出しを提供します。ラッパーはシステムコールからデータを受信するたびに、それを分析してプログラムに明確に提供します。プログラム内のマシン対話型操作は、最終的にシステムコールに変換されます。それでは、それらのいくつかを見てみましょう。 Linuxシステムで使用できるLinuxシステムコールの長いリストがあります。これは、一般的で主に使用されるLinuxシステムコールのリストです。



  • 開ける
  • 選ぶ
  • Exec
  • 書く
  • 読んだ
  • Lseek
  • 選択する

この記事では、C言語を使用したLinuxシステムコールのいくつかについて説明し、実際に使用してみましょう。



オープンシステムコール:

LinuxディストリビューションのOpenシステムコールを使用して、C言語のコードで指定するドキュメントをすばやく開くことができます。最初にコマンドターミナルを起動します。ショートカットCtrl + Alt + Tを使用できます。ホームディレクトリにテキストファイルtest.txtがあり、その中にいくつかのコンテンツが含まれているとします。したがって、最初に、nanoエディターを介してターミナルに新しいCタイプのファイル名new.cを作成する必要があります。したがって、以下の簡単なnano命令を試してください。





$ナノnew.c

これで、Nanoエディターが起動しました。以下に示すコードを入力します。コードには2つのファイル記述子があります。両方のファイルは、openシステムコールを使用して開くことができます。最初の記述子には読み取り呼び出しが含まれ、2番目の記述子には書き込み関数が含まれます。最初のopen呼び出しは、テキストファイルtest.txtを開き、その内容をファイル記述子fdに保存することです。 2番目のオープンシステムコールは、targetという名前のファイルを作成することです。ドキュメントターゲットは、fd1ファイル記述子に払い戻されました。書き込み命令は、バッファ内のデータのバイトを転記するために使用されます。 Ctrl + Sをタップしてコードを保存し、ショートカットキーCtrl + Xを押してファイルを終了します。



gccコンパイル命令を実行して、このCコードをコンパイルします。

$gccnew.c

次のように、シェルで単純なa.outクエリを使用してコードを実行してみましょう。

$/a.out

出力データはファイルターゲットに送信されました。 catクエリを使用してターゲットファイルを確認しましょう。出力画面には、ターゲットファイルの20文字のデータが表示されています。

$目標

Execシステムコール:

現在処理中のファイルを実行するために、execシステムコールがキャストオフされています。以前の実行可能ファイルが置き換えられ、execが呼び出されるたびに現在のファイルが操作されます。 execシステムコールを使用することにより、ループ内の古いドキュメントまたはアプリケーションが新しいもので上書きされると想定される場合があります。新しいソフトウェアを使用して、プロセス全体の素材を上書きします。 exec()を呼び出すたびにステートメントでタイトルが指定されているドキュメントは、exec()システムコール()を実行するユーザー情報セクションの代わりに使用されます。したがって、コマンドターミナルを開き、nanoエディターを使用して、次のように新しいCタイプのファイルを作成します。

$ナノexp.c

エディターが開かれました。以下のC言語コード全体を書き留めてください。それに含まれている3つの主要なライブラリがあります。その後、main関数がインスタンス化されました。 printステートメントは、ファイルexp.cの文字列データとプロセスIDを示しています。 getpid()関数はこの目的で使用されています。次に、いくつかの値を含む文字型配列があります。 execシステムコールは、ファイル名と上記の1行の配列を引数として取るために使用されています。これで、ファイルhello.cが処理されます。その後、別のprintステートメントがここまで来ますが、実行されることはありません。 Ctrl + Sを押してこのファイルを保存します。 Ctrl + Xを押して終了します。

次に、nanoエディターを使用して別のcファイルhello.cを作成します。これを行うには、シェルで以下のクエリを使用します。

$ナノこんにちはC

その中に以下のコードを書いてください。このコードには、main関数に2つのprintステートメントが含まれています。 1つ目は、指定された文字列のみを出力し、2つ目は、現在使用されているファイルhello.cのプロセスIDをフェッチしながら文字列を出力します。

gccを使用して両方のファイルを次々にコンパイルしてみましょう。

$gcc–o exp exp.c

$gcc–o hello hello.c

exp.cファイルを実行すると、exp.cファイルから最初のprintステートメントが出力され、hello.cファイルから両方の印刷行が出力されます。

$/exp

結論:

Linuxシステムコールの全体的な概念と、それらをLinuxシステムでどのように使用できるかについて詳しく説明しました。この概念を実装する間、Ubuntu20.04を使用しました。