2011-10-25 6 views
1

私はLinuxカーネル開発の新機能です。私は、Linuxカーネル2.6でmy_pidというシステムコールを実装しました。システムコールからgetpidシステムコールを呼びたい。どうしたらいいですか?カーネルスペースで別のシステムコールからシステムコールを作る方法

私が何かしたい:

pid_t my_pid(){ リターンGETPIDを(); }

また、ユーザ空間のCからは、次のコマンドを使用して任意のシステムコールを呼び出すことができます。カーネルモードでこれを行う一般的な方法は何ですか?

答えて

6

ここでです。これを行う一般的な方法はありません。

あなたはカーネル空間である場合は、代わりにsyscall型命令を使用しての直接システムコール機能を実装するカーネル関数を呼び出し、または/目的のアクションに影響を与え、必要な情報を抽出する他の手段を使用する必要があります。

具体的なケースがgetpid()の場合は、current->pidを使用してください。

カーネル名currentは常に<linux/sched.h>struct task_structの検索)を介して定義されている現在のtask_structへのポインタです。そのメンバーにアクセスするコードは通常インライン展開されます。つまり、コードがカーネルの一部として実行されているときにこれらを取得するために必要な関数呼び出し(システム呼び出しがはるかに少ない)さえありません。

+0

ありがとうございます。 – max

関連する問題