GUID和uuid使用非常多,却没有查到一个完整的Linux编程获取uuid的实现,或者实现的描述不清楚,所以总结一篇文章来说明。
linux编程中,我们可以这样来包含uuid的头文件:
#include <uuid/uuid.h>
然而,很可能一些系统会提示uuid.h文件找不到。因为uuid是需要自己提前安装的。安装uuid的方法(root用户下)如下:
yum install e2fsprogs-devel
yum install uuid-devel
yum install libuuid-devel
安装完后,就可以找到uuid.h头文件了。先来看看效果图:
分别格式化了两种显示uuid的格式,第一种最为常见,第二种也经常要用到,就是去掉了{}个-符号而已。
下面是完整的linux下实现获取的uuid的代码:
#include <iostream>
#include <string>
using namespace std;
#include <uuid/uuid.h>
#include <stdio.h>
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
string CreateGUID()
{
GUID guid;
uuid_generate(reinterpret_cast<unsigned char *>(&guid));
char buf[64] = { 0 };
snprintf(buf,sizeof(buf),
"%08X%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X",
guid.Data1,
guid.Data2,
guid.Data3,
guid.Data4[0],
guid.Data4[1],
guid.Data4[2],
guid.Data4[3],
guid.Data4[4],
guid.Data4[5],
guid.Data4[6],
guid.Data4[7]) ;
return std::string(buf) ;
}
int main()
{
string guid = CreateGUID();
cout << guid << endl;
}
需要注意的是,GUID在linux系统是不存在的,所以我们才typedef了一个。不要使用uuid_t替换GUID定义变量。