EN JA
UUIDGEN(2)
UUIDGEN(2) FreeBSD System Calls Manual UUIDGEN(2)

名称

uuidgen全世界的にユニークな識別子の生成

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/uuid.h>

int
uuidgen( struct uuid *store, int count);

解説

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) アドレスです。そのようなインタフェースが存在しない場合には、ランダムなマルチキャストアドレスが代わりに使用されます。

バイナリ表現はバイトオーダに対して敏感です。あらゆるマルチバイトのフィールドは、ローカルまたはネイティブのバイトオーダで格納されなければならず、また識別子はそのバイトオーダに同意しないホストに対して送信されるときに、変換されなければなりません。しかしながら、この仕様は具体的な用語で文書化されていません。また、その他の点ではこのシステムコールの範囲を超えています。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

uuidgen() システムコールは、次の場合に失敗するかもしれません:
[ EFAULT]
store によって指されるバッファに、どれか 1 つのまたは全ての識別子を書き込めません。
[ EINVAL]
count 引数が 1 よりも小さい、またはハード上限の 2048 よりも大きいです。

関連項目

uuidgen(1), uuid(3)

規格

この識別子は、DCE 1.1 RPC の仕様に適合して表現され、生成されます。 uuidgen() システムコールそれ自身は、仕様の一部ではありません。

歴史

uuidgen() システムコールは、 FreeBSD 5.0 ではじめて登場しました。
May 26, 2002 FreeBSD