2009-09-03 7 views
10

ここでGUID/UUIDに関する質問が行われたようですが、私が探しているものを見つけることができないようです。 CでV4 GUIDを生成する関数、つまりC#のGuid.NewGuidと本質的に互換性のある関数が必要です。CでGUIDをシンプルに生成

これは、Windows(XP、Server 2003/8など)とUnix(AIX、Sun、HP)の3つの異なるディストリビューションで動作する必要があります。

仕様のホワイトペーパーをいくつか見てきましたが、実装例がいくつかありますが、常に適切な乱数に問題があるか、V1またはV3 UUIDなどしか生成されません。wikipedia page UUIDsはいくつかのサンプルライブラリを私に指摘しましたが、私がここで達成しようとしているものに対しては、これはあまりにも重すぎます。

私は自分で何かを実装できると思っていますが、本当にシンプルで軽量なものがあれば、時間を浪費したくありません。誰かが何かを知っているか知っていますか?

ありがとうございました。

答えて

10

CoCreateGuidは、すべての形式のWindowsでは標準です。 Linux標準はlibuuidです。これはすべてのLinuxバージョンで標準であり、軽量でなければなりません。私は、WindowsとUnixの両方で動作するライブラリは知らない。私は、WindowsとLinuxのブランチ#ifが実際にここで適切だと思います。

+1

実際に両方のシステムで同じバイナリを配布する必要はありますか?または、同じソースをコンパイルするだけですか?あなたは質問が指定されていません。同じバイナリを実際に配布する必要がある場合は、おそらくlibuuidのソースを入手してバイナリにコンパイルして、クロスプラットフォームにすることができます。 –

+3

@モーリナー:これは*プラットフォームに依存しません。共通のインターフェースの下で、いくつかのOS固有のAPIをラップします。最終的には、OSの各カテゴリの下でアプリケーションをコンパイルする必要があるので、コンパイル時には、同じインタフェースの適切な実装を選択するための切り替えが必要です。 私が知っている良いライブラリには、この「トリック」があります。たとえばboost :: threadを参照してください。 –

+0

同じソースをコンパイルするだけです。#ifブランチは完全に受け入れられます。私のUnixディストリビューションがlibuuidを持つことは保証されていますか?私は本当にすべての顧客にそれをインストールさせたり、それを適切にパッケージ化することはできません。 – Morinar

2

実際、CoCreateGuid()はUuidCreate()を呼び出します。生成されたデータタイプ(UUID,GUID)はまったく同じです。 Windowsでは両方の関数を使用してGUIDを作成できます

関連する問題