UUIDGEN(2)

名称
uuidgen - 全世界的に唯一の識別子の生成

ライブラリ
libc

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

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

戻り値

エラー
uuidgen() システムコールは失敗することがあります:

[EFAULT]
    store によって指されるバッファに、どれか 1 つのまたは全ての識別子を書き込めません。

[EINVAL]
    count 引数が 1 よりも小さい、またはハード上限の 2048 よりも大きいです。

関連項目
uuidgen(1), uuid(3)

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

歴史
uuidgen() システムコールは FreeBSD 5.0 ではじめて登場しました。