好记性不如烂笔头啊,还是记录一下!
开发人员或多或少都应该知道UUID
或GUID
,这是摘自维基百科的一段描述。
通用唯一识别码
(Universally Unique Identifier, UUID)
是一个软件建构的标准,亦为自由软件基金会(Open Software Foundation, OSF)
的组织在分散式计算环境(Distributed Computing Environment, DCE)
领域的一部份。
UUID
的目的,是让分散式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的UUID
。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的UUID
,即是微软的Microsoft's Globally Unique Identifiers (GUIDs)
,而其他重要的应用,则有Linux ext2/ext3 档案系统
、LUKS 加密分割区
、GNOME
、KDE
、Mac OS X
等等。另外我们也可以在2fsprogs
套件中的UUID
函式库找到实作。
现在自己做的小游戏需要在不同系统及开发环境中生成UUID
,故对UUID
的生成进行了一些学习,整理如下。
1. Shell
几乎所有Unix和类Unix环境中都包含了一个名为uuidgen
的小工具,运行即可生成一个UUID
。
2. Linux/Mac OS X
#include <stdio.h
#include <uuid/uuid.h>
int main(int argc, char **argv)
{
uuid_t uuid;
uuid_generate(uuid);
unsigned char *p = uuid;
int i;
for (i = 0; i < sizeof(uuid_t); i++, p++)
{
printf("%02x", *p);
}
printf("\n");
return 0;
}
注意:在Linux下编译时需要链接uuid
库(-luuid
),在Mac OS X下则不需要。
3. Mac OS X (Cocoa)
进行Cocoa
开发时,使用CFUUIDCreate
函数可生成UUID
,以下代码摘自Vincent Gable’s Blog。
+ (NSString*) stringWithUUID
{
CFUUIDRef uuidObj = CFUUIDCreate(nil);//create a new UUID
//get the string representation of the UUID
NSString *uuidString = (NSString*)CFUUIDCreateString(nil, uuidObj);
CFRelease(uuidObj);
return [uuidString autorelease];
}
4. Windows
使用API
函数HRESULT CoCreateGuid(__out GUID *pguid)
可生成GUID
(即UUID
),由于CoCreateGuid
是COM
函数,别忘了首先调用CoInitializeEx
进行初始化。
int main(int argc, char **argv)
{
::CoInitialize( 0 );
// Generate GUID.
GUID Guid = { 0 };
::CoCreateGuid( &Guid );
LPOLESTR szGUID = NULL;
StringFromCLSID(Guid, &szGUID);
wprintf(L"%s", szGUID);
GUID Guid2 = {0};
CLSIDFromString(szGUID, &Guid2);
if(szGUID)
{
CoTaskMemFree(szGUID);
szGUID = 0;
}
}
5. C#
using System;
namespace DisplayGUID
{
class GuidExample
{
static void Main(string[] args)
{
GenerateGUID();
}
static void GenerateGUID()
{
Console.WriteLine("GUID: " + System.Guid.NewGuid().ToString());
}
}
}
5. Java
JDK 1.5
以上内建了UUID
的支持,使用非常简单。
import java.util.UUID;
...
String uuid = UUID.randomUUID().toString();
网友评论