実装または生成されたkernelFunction-to-machMsgアダプタはどこですか?
これらは、Mach Interface Generator(MIG)によって生成されます。カーネルソースで拡張子.defsのファイルを調べると、MIGによって生成された定義が表示されます。
Apple Docs述べると
:トラップレベルで
、最もマッハ抽象化へのインターフェースは、それらのオブジェクトを表すカーネルポートから送信されたメッセージで構成されています。トラップレベルのインタフェース(mach_msg_overwrite_trapなど)とメッセージ形式は、Mach Interface Generator(MIG)によって通常の使用法で抽象化されます。 MIGは、それらのAPIの記述に基づいて、メッセージベースのAPIへの手続き型インタフェースをコンパイルするために使用されます。
task_get_special_port
の場合、defsファイルhereが表示されます。
そのファイルでmigを呼び出すと、3つのファイルが生成されます。
- 送信者の.Cファイル(taskUser.c)
- 受信機のための.Cファイル(taskServer.c)
- 送信者と受信者との間の通信のためのプロトコルを定義するヘッダファイル(task.h)
Server.cファイルを調べると、この関数が表示され、task_get_special_port
が直接呼び出されます。 mig
を使用して
mig_internal novalue _Xtask_get_special_port
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
{
...
RetCode = task_get_special_port(In0P->Head.msgh_request_port, In0P->which_port, &OutP->special_port.name);
if (RetCode != KERN_SUCCESS) {
MIG_RETURN_ERROR(OutP, RetCode);
}
...
}
は手動でクライアントとサーバのプロトコルを記述するよりもはるかに少ないエラーが発生しやすくなります。