プロセスにカーネルモード操作が必要な場合は、システムコールを使用してください。もしそうなら、結果はどのようにプロセスに返されますか?
答え1
メモ:以下のすべての情報は参考Webサイトから入手したものです。
~からこれリンクで次の情報を見つけました。
ㅏシステムコールカーネルが提供するユーザ空間アプリケーションとサービスの間のインタフェース。このサービスはカーネルによって提供されるため、直接呼び出すことはできず、代わりにユーザースペース/カーネル境界にまたがるプロセスを使用する必要があります。
システムコールの使用
ユーザー空間アプリケーションでこれを使用するために必要なものを見てみましょう。新しいカーネルシステムコールを使用する方法は2つあります。 1つ目は便利な方法(本番コードではこれをしたくない)、2つ目はより多くの作業が必要な伝統的な方法です。最初の方法では、システムコール関数を介してインデックスで識別された新しい関数を呼び出します。 syscall関数を使用すると、システムコールの呼び出しインデックスとパラメータセットを指定してシステムコールを呼び出すことができます。たとえば、以下に示す短いアプリケーションは、対応するsys_getjiffies
インデックスを使用してアプリケーションを呼び出します。
#include <linux/unistd.h>
#include <sys/syscall.h>
#define __NR_getjiffies 320
int main()
{
long jiffies;
jiffies = syscall( __NR_getjiffies );
printf( "Current jiffies is %lx\n", jiffies );
return 0;
}
ご覧のとおり、システムコール関数は、使用するシステムコールテーブルのインデックスを最初の引数として使用します。パラメータを渡す必要がある場合は、indexを呼び出した後にパラメータが提供されます。ほとんどのシステムコールには、_のマッピングを指定するためのSYS_シンボル定数が含まれています。NRインデックス。たとえば、syscallを使用してインデックス__NR_getpidを呼び出すことができます。
syscall( SYS_getpid )
システムコール機能はアーキテクチャによって異なりますが、制御をカーネルに転送するメカニズムを使用します。このパラメータは_のマッピングに基づいています。SYSのNRインデックス提供されるシンボル/usr/include/bits/syscall.h
(libcをビルドするときに定義されています)このファイルを直接参照しないでください/usr/include/sys/syscall.h
。