copyout

指定したDTraceバッファから指定したユーザー空間アドレスに、指定したサイズをコピーします。

void copyout(void *src, uintptr_t addr, size_t size)

copyout関数は、指定されたバイト数を指定されたDTraceバッファから指定されたユーザー空間アドレスにコピーする破壊的関数です。ユーザー空間アドレスは現在のスレッドに関連付けられたプロセスのアドレス空間にあります。ユーザー空間アドレスが現在のアドレス空間で有効なフォルト・インのページに対応していない場合は、エラーが生成されます。

例7-10 コピーアウトを使用して、DTraceバッファから指定したユーザー空間アドレスにデータをコピーする方法

この例は、ユーザーがlsコマンドを実行するときに、copyoutを使用してwriteシステム・コールのユーザー空間アドレスに文字列値「DTrace」を書き込む方法を示しています。このスクリプトを実行すると、システム上でlsコマンドを実行するたびに、コマンドによって返される最初の5バイトが文字列「DTrace」に置き換えられます。

#pragma D option destructive
syscall::write:entry
/execname == "ls"/
{
    copyout("DTrace", arg1, 5);
}