プロセスの CMW ラベルを取得した際に、CMW ラベルを一単位として処理することも、また、1 つあるいは両方のラベル部を抽出し、ラベル部だけを処理することもできます。次の例では、プロセスの CMW ラベルを取得し、機密ラベル部と情報ラベル部を抽出し、プロセス CMW ラベルを ASCII 文字列に変換し、出力します。
#include <tsol/label.h> main() { int retval, length = 0; bclabel_t pCMWlabel; bslabel_t psenslabel; bilabel_t pinflabel; char *string; /* プロセスの CMW ラベルを得る */ retval = getcmwplabel(&pCMWlabel); /* 機密ラベル部と情報ラベル部を得る */ getcsl(&psenslabel, &pCMWlabel); getcil(&pinflabel, &pCMWlabel); /* プロセスの CMW ラベルを ASCII 文字列に変換し、出力する */ retval = bcltos( &pCMWlabel, &string, length, LONG_CLASSIFICATION); printf("Process CMW label = %s¥n", string); }
printf 文によって、次のように出力されます。UNCLASSIFIED は情報ラベルを表し、[C] は機密ラベルを表します。この CMW ラベルは、プロセスが、情報ラベル UNCLASSIFIED を使用して、機密レベル Confidential ([C]) で動作していることを示します。この CMW ラベルは、プログラムが動作しているワークスペースから継承されます。プログラムがデータを読み取ると、プロセスの情報ラベルは読み取られるデータの情報ラベルに応じて浮上します。
Process CMW label = UNCLASSIFIED [C]
ASCII 出力は、bcltos(3) に対するフラグパラメータと、label_encodings(4) 内の記述によって異なります。フラグパラメータ値の詳細は、「バイナリから ASCII への変換」を参照してください。