C言語でUUIDを生成する方法

提供: C言語入門
2018年3月17日 (土) 18:05時点におけるDaemon (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

UUID(Universally Unique Identifier) とは、ソフトウェア上でオブジェクトを一意に識別するための識別子です。分散システムで統制なしに作成できる識別子として設計されていて、将来的にも衝突が起きない前提で利用できます。

読み方

uuid
ゆーゆーあいでぃー

概要

UUIDは、利用者にユニークなIDを振ったり、分散ストレージでオブジェクトの識別用にIDを振ったりするときに、使えるID(識別子)です。

UUIDの例

UUIDは、以下のようなフォーマットです。

$ cat /proc/sys/kernel/random/uuid
edd751bf-f1fc-4ce6-8520-ff7c263ff02b

UUIDの作り方

UUIDは、

  • /proc/sys/kernel/random/uuid
  • uuidgen コマンド
  • libuuid

などを使うことで作成できます。

インストール

Ubuntuの場合

sudo apt install uuid-dev

uuid1.c の例

ソースコード uuid1.c

/*
 * uuid1.c
 * Copyright (C) 2018 kaoru <kaoru@localhost>
 *
 * Distributed under terms of the MIT license.
 */
#include <uuid/uuid.h>
#include <stdio.h>
#include <stdlib.h>
 
const int uuid_len = 36+1; // 36byte string + null
 
int
main(int argc, char *argv[])
{
        uuid_t u1;
        char out[uuid_len];
        uuid_generate(u1);
        uuid_unparse(u1, out);
        (void)printf("%s\n", out);
        exit(EXIT_SUCCESS);
}

コンパイル

Windows10のWSL(Windows Subsystem for Linux) のUbuntu の環境で -L で libuuid.so のあるパスを指定したが、コンパイルできなかったので、直接 .so を指定することになりました。

cc -luuid uuid1.c /usr/lib/x86_64-linux-gnu/libuuid.so -o uuid1

失敗したときの例は、以下の通りです。

$ cc -L/lib/x86_64-linux-gnu -luuid uuid1.c
/tmp/ccOHMvUz.o: In function `main':
uuid1.c:(.text+0x86): undefined reference to `uuid_generate'
uuid1.c:(.text+0x99): undefined reference to `uuid_unparse'
collect2: error: ld returned 1 exit status

実行例

% ./uuid1
d8981b3a-ec33-4bda-8eba-09aa172bb2a9

関連項目




スポンサーリンク