システムコールのオーバーヘッドを最小限に抑えるため、監査レコードを AW_QUEUE トークンで待ち行列に入れ、auditwrite(3) ルーチンに対する 1 回のコールで書き込むことができます。次の例では、auditwrite(3) ルーチンに対する最初のコールで監査の待ち行列が有効にされ、待ち行列に 200 バイトの監査レコードが記録された時点ですべてのレコードがフラッシュするように設定されます。AW_FLUSH トークンを使用すると、待ち行列のフラッシュを強制できます。また、AW_NOQUEUE トークンにより、待ち行列が無効になるたびに待ち行列は自動的にフラッシュします。
次の例では、待ち行列は 200 バイトのデータに達していませんが、2 番目のレコードが追加された後、待ち行列は手動によりフラッシュします。また、待ち行列が無効にされた最後の時点で、待ち行列は再びフラッシュします。
バイト制限が理由で、監査トレールに部分的なレコードが記録されることはありません。待ち行列が 200 バイト保持できる場合、この制限に達した時点で、auditwrite(3) ルーチンに渡されたすべてのレコードが完全にフラッシュされます。これには、完全な監査レコードを形成する 200 バイトを超えるデータバイトも含まれます。
/* 140 バイトごとにフラッシュするように待ち行列を設定 */ auditwrite( AW_QUEUE, 200, AW_END); /* 待ち行列にレコードを書き込む */ auditwrite( AW_EVENT, "AUE_second_signature", AW_TEXT, "First record in queue", AW_WRITE, AW_END); auditwrite( AW_EVENT, "AUE_second_signature_verify", AW_TEXT, "Second record in queue", AW_WRITE, AW_END); /* 手動で待ち行列をフラッシュする */ auditwrite(AW_FLUSH, AW_END); /* 次のレコードを書き込む */ auditwrite( AW_EVENT, "AUE_second_signature", AW_TEXT, "Third record in queue", AW_WRITE, AW_END); /* 待ち行列とフラッシュを終了する */ auditwrite(AW_NOQUEUE, AW_END);
表示用の端末に、次の監査記録が表示されます。
header,204,3,second signature requested,,Mon Sep 09 10:26:28 1996, + 79950000 msec text,First record in queue subject,zelda,zelda,staff,zelda,staff,6098,5879,0 0 phoenix slabel,C return,success,0 header,204,4,second signature added,,Mon Sep 09 10:26:28 1996, + 79950000 msec text,Second record in queue subject,zelda,zelda,staff,zelda,staff,6098,5879,0 0 phoenix slabel,C return,success,0 header,204,5,second signature requested,,Mon Sep 09 10:26:28 1996, + 119947000 msec text,Third record in queue subject,zelda,zelda,staff,zelda,staff,6098,5879,0 0 phoenix slabel,C return,success,0 |