天天看點

各種OS中生成UUID的方法各種os中生成UUID的方法

文章目錄

  • 各種os中生成UUID的方法
    • 1. Shell
    • 2. Linux/Mac OS X
    • 3. Mac OS X (Cocoa)
    • 4. Windows
    • 5. C#
    • 6. Java

各種os中生成UUID的方法

好記性不如爛筆頭啊,還是記錄一下!

開發人員或多或少都應該知道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 等等。另外我們也可以在 e2fsprogs 套件中的 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()); 
        }
    }
} 
           

6. Java

JDK 1.5以上内建了UUID的支援,使用非常簡單。

import java.util.UUID;

...

String uuid = UUID.randomUUID().toString();
           

繼續閱讀