开源库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,分布式计算环境)规范,UUID是指在一台机器上生成的数字,保证在全球范围的唯一性。

GUID(Globally Unique Identifier)跟UUID是同一个东西,来源于微软。

一个UUID是一个16字节(128位)的数字,一般通过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散列函数来生成一个UUID;

3. 基于随机数的UUID:根据随机数或者伪随机数生成UUID;

4. 基于名字空间的UUID(SHA1):由用户指定一个namespace和一个具体的字符串,通过SHA1散列函数来生成一个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

执行结果如下:

GitHub: https://github.com/fengbingchun/Messy_Test 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值