プロセスの 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 への変換」を参照してください。