このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。
D言語でポインタを実装すると、オペレーティング・システム・カーネルのデータ・オブジェクトのメモリー・アドレスを作成および操作して、それらのデータ・オブジェクトの内容を変数や連想配列に格納できます。 Dポインタの構文は、ANSI-Cのポインタの構文と同じです。 たとえば、次の文では、整数に対するポインタであるp
というDグローバル変数を宣言しています。
int *p;
この宣言は、p
自体の値が別の整数のメモリー内のアドレスである64ビットの整数であることを示しています。
カーネル内のデータ・オブジェクトに対するポインタを作成する場合、&
参照演算子を使用してそのアドレスを計算できます。 たとえば、カーネル・ソース・コードでunsigned long max_pfn
変数を宣言します。 D言語でこのような外部変数の値にアクセスするには、その値に接頭辞として`
(バッククォート)スコープ演算子を付けます。
value = `max_pfn;
複数のカーネル・モジュールで同じ名前の変数を宣言する場合、スコープが設定された外部変数に接頭辞としてモジュールの名前を付けます。 たとえば、foo`bar
は、モジュールfoo
によって提供されているbar()
関数のアドレスを示します。
外部変数のアドレスを抽出するには、&
演算子を適用してそれをポインタとして格納します。
p = &`max_pfn;
*
間接参照演算子を使用して、ポインタが指し示すアドレスのオブジェクトを参照できます。
value = *p;
&
演算子は、連想配列、組込み関数、変数などのDTraceオブジェクトには適用できません。 複合構造体を作成する場合、DTraceオブジェクトのカーネル・アドレスを取得する式を作成できます。 ただし、DTraceでは、プローブの起動後もこのようなオブジェクトのアドレスが維持されるかどうかは保証されません。
*
間接参照演算子は、割当て式の左側で使用することはできません。 値は、名前を使用するか、スカラー配列または連想配列に配列索引演算子の[]
を適用して、D変数に直接割り当てることのみ可能です。
ポインタを使用して間接関数コールを実行することはできません。 DTrace関数は、名前を使用して直接コールすることのみ可能です。