「C言語でUUIDを生成する方法」の版間の差分

提供: C言語入門
移動: 案内検索
(ページの作成:「UUID(Universally Unique Identifier) とは、ソフトウェア上でオブジェクトを一意に識別するための識別子です。分散システムで統制な...」)
 
 
(同じ利用者による、間の1版が非表示)
行7: 行7:
 
== 概要 ==
 
== 概要 ==
 
UUIDは、利用者にユニークなIDを振ったり、分散ストレージでオブジェクトの識別用にIDを振ったりするときに、使えるID(識別子)です。
 
UUIDは、利用者にユニークなIDを振ったり、分散ストレージでオブジェクトの識別用にIDを振ったりするときに、使えるID(識別子)です。
 +
== UUIDの例 ==
 +
'''UUID'''は、以下のようなフォーマットです。
 +
<syntaxhighlight lang="bash">
 +
$ cat /proc/sys/kernel/random/uuid
 +
edd751bf-f1fc-4ce6-8520-ff7c263ff02b
 +
</syntaxhighlight>
 +
== UUIDの作り方 ==
 +
'''UUID'''は、
 +
* /proc/sys/kernel/random/uuid
 +
* uuidgen コマンド
 +
* libuuid
 +
などを使うことで作成できます。
 
== インストール ==
 
== インストール ==
 
=== Ubuntuの場合 ===
 
=== Ubuntuの場合 ===
行42: 行54:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
cc -luuid uuid1.c /usr/lib/x86_64-linux-gnu/libuuid.so -o uuid1
 
cc -luuid uuid1.c /usr/lib/x86_64-linux-gnu/libuuid.so -o uuid1
 +
</syntaxhighlight>
 +
 +
失敗したときの例は、以下の通りです。
 +
<syntaxhighlight lang="bash">
 +
$ 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
 
</syntaxhighlight>
 
</syntaxhighlight>
 
=== 実行例 ===
 
=== 実行例 ===

2018年3月17日 (土) 18:05時点における最新版

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

関連項目