开源库libuuid简介及使用
libuuid是一個開源的用于生成UUID(Universally Unique Identifier,通用唯一標識符)的庫,它的源碼可從https://sourceforge.net/projects/libuuid/ 下載,最新版本為1.0.3,更新于2013年4月27日,此庫僅支持在類Linux下編譯使用。UUID來源于OSF(Open Software Foundation,開源軟件基金會)的DCE(Distributed Computing Environment,分布式計算環(huán)境)規(guī)范,UUID是指在一臺機器上生成的數(shù)字,保證在全球范圍的唯一性。
GUID(Globally Unique Identifier)跟UUID是同一個東西,來源于微軟。
一個UUID是一個16字節(jié)(128位)的數(shù)字,一般通過32個十六進制表示,一個UUID被連字符分成5段,標準的UUID格式為xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,即形式為8-4-4-4-12的32個字符,其中字母是16進制表示,大小寫無關。
不同的UUID版本:
1. 基于時間的UUID:通過當前時間戳、機器MAC地址生成;
2. 基于名字空間的UUID(MD5):由用戶指定一個namespace和一個具體的字符串,通過MD5散列函數(shù)來生成一個UUID;
3. 基于隨機數(shù)的UUID:根據(jù)隨機數(shù)或者偽隨機數(shù)生成UUID;
4. 基于名字空間的UUID(SHA1):由用戶指定一個namespace和一個具體的字符串,通過SHA1散列函數(shù)來生成一個UUID。
以下是libuuid測試代碼(test_libuuid.cpp):
#include "funset.hpp"
#include <iostream>
#ifndef _MSC_VER
#include <uuid.h>int test_libuuid()
{uuid_t uuid1, uuid2, uuid3, uuid4, uuid5;char uuid1_str[37], uuid2_str[37], uuid3_str[37], uuid4_str[37];uuid_generate(uuid1);uuid_unparse(uuid1, uuid1_str);fprintf(stdout, "uuid1 result: %s\n", uuid1_str);uuid_generate_random(uuid2);uuid_unparse_lower(uuid2, uuid2_str);fprintf(stdout, "uuid2 result: %s\n", uuid2_str);uuid_generate_time(uuid3);uuid_unparse_upper(uuid3, uuid3_str);fprintf(stdout, "uuid3 result: %s\n", uuid3_str);uuid_generate_time_safe(uuid4);uuid_unparse(uuid4, uuid4_str);fprintf(stdout, "uuid4 result: %s\n", uuid4_str);uuid_parse(uuid1_str, uuid5);int ret = uuid_compare(uuid1, uuid5);fprintf(stdout, "uuid1 compare uuid5: %d\n", ret);ret = uuid_is_null(uuid1);fprintf(stdout, "uuid1 is null: %d\n", ret);uuid_clear(uuid1);ret = uuid_is_null(uuid1);fprintf(stdout, "uuid1 is null: %d\n", ret);ret = uuid_type(uuid2);fprintf(stdout, "uuid2 type: %d\n", ret);ret = uuid_variant(uuid2);fprintf(stdout, "uuid2 variant: %d\n", ret);struct timeval tv;time_t time_reg = uuid_time(uuid3, &tv);fprintf(stdout, "uuid3 time is: (%ld, %ld): %s\n", tv.tv_sec, tv.tv_usec, ctime(&time_reg));return 0;
}#else
int test_libuuid()
{fprintf(stderr, "Error: libuuid only support linux\n");return -1;
}
#endif
執(zhí)行結(jié)果如下:
GitHub:?https://github.com/fengbingchun/Messy_Test?
總結(jié)
以上是生活随笔為你收集整理的开源库libuuid简介及使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FFmpeg中AVDictionary介
- 下一篇: FFmpeg中编码类型为rawvideo