uuidgen()
システムコールは
count
個の全世界的に唯一の識別子 (UUID) を生成し、それらを
store
によって指されるバッファへ書込みます。
この識別子は全世界的に唯一の識別子の異形である DEC version 1 の
文法とセマンティクスに従って生成されます。
この識別子のより詳細な記述は下記を参照してください。
利用可能な node フィールドのための IEEE 802 アドレスが無い場合には、
個々のシステムコールの呼び出し毎に、ランダムなマルチキャストアドレスが
生成されます。
時間基準の UUID の生成のアルゴリズムに従って、
新しいランダムクロックシーケンスを強制します。
それによって、識別子が唯一である可能性が増します。
複数の識別子が生成されなければならない時には、
uuidgen()
システムコールは、密度の濃い識別子の集合を生成します。
これの意味するところは、
集合の中で最小の識別子よりも大きくかつ、
集合の中で最大の識別子よりも小さくかつ、
集合の中にまだ存在していないという条件の識別子が存在しないということです。
地球規模に唯一の識別子 (GUID) としても知られる全世界的に唯一の識別子は、
128 ビットのバイナリ表現を持っています。
これらのビットの分類と意味は以下の構造体によって記述され、
そのフィールドの説明が続きます:
struct uuid {
uint32_t time_low;
uint16_t time_mid;
uint16_t time_hi_and_version;
uint8_t clock_seq_hi_and_reserved;
uint8_t clock_seq_low;
uint8_t node[_UUID_NODE_LEN];
};
time_low
|
|
60 ビットのタイムスタンプの下位の 32 ビットです。
このフィールドはネイティブのバイトオーダで格納されます。
|
time_mid
|
|
60 ビットのタイムスタンプの上位 28 ビットのうちの下位の 16 ビットです。
このフィールドはネイティブのバイトオーダで格納されます。
|
time_hi_and_version
|
|
60 ビットのタイムスタンプの上位 12 ビットと 4 ビットのバージョン番号の
複合されたものです。
バージョン番号は 16 ビットのフィールドの上位 4 ビットに格納されます。
このフィールドはネイティブのバイトオーダで格納されます。
|
clock_seq_hi_and_reserved
|
|
14 ビットのシーケンス番号の上位 6 ビットと 2 ビットのバリアント値の
複合されたものです。
バリアント値の幅はそのバリアントによって決定されることに注意してください。
uuidgen()
システムコールによって生成される識別子が持つバリアント値は 10b です。
バリアント値はこのフィールドの上位ビットに格納されます。
|
clock_seq_low
|
|
14 ビットのシーケンス番号の下位 8 ビットです。
|
node
|
|
そのノードのインタフェースの 1 つの 6 バイトの IEEE 802 (MAC) アドレスです。
そのようなインタフェースが存在しない場合には、ランダムなマルチキャスト
アドレスが代わりに使用されます。
|
バイナリ表現はバイトオーダに対して敏感です。
あらゆるマルチバイトのフィールドは、ローカルまたはネイティブのバイトオーダで
格納されなければならず、また識別子はそのバイトオーダに同意しない
ホストに対して送信されるときに、変換されなければなりません。
しかしながら、この仕様は具体的な用語で文書化されていません。また、
その他の点ではこのシステムコールの範囲を超えています。