13

私は奇妙な苦境に陥っています。Linux プログラム (RPM を使用して配布しています) で UUID を生成する必要があります。ユーザーに libuuid のインストールを要求して、アプリケーションに別の依存関係を追加したくありません (CentOS などのほとんどの Linux ディストリビューションには libuuid が含まれていないようです)。

UUID を生成する標準の Linux システム コールはありませんか (たとえば、Windows では CoCreateGuid があります)。コマンド uuidgen は何を使用しますか?

4

8 に答える 8

11

コメントありがとうございます!

私はそれぞれを調べました、そしてこれが私の要件に最も適したものです:

私が必要としていたのは、アプリケーションをインストールしたすべてのユーザーに対して1回だけ乱数から生成された単純な時間ベースのUUIDでした。RFC4122で指定されているUUIDバージョン4はまさにそれでした。私は提案されたアルゴリズムを調べて、LinuxとWindowsで機能する非常に単純なソリューションを思いつきました(多分それは単純すぎますが、それはニーズを満たします!):

srand(time(NULL));

sprintf(strUuid, "%x%x-%x-%x-%x-%x%x%x", 
    rand(), rand(),                 // Generates a 64-bit Hex number
    rand(),                         // Generates a 32-bit Hex number
    ((rand() & 0x0fff) | 0x4000),   // Generates a 32-bit Hex number of the form 4xxx (4 indicates the UUID version)
    rand() % 0x3fff + 0x8000,       // Generates a 32-bit Hex number in the range [0x8000, 0xbfff]
    rand(), rand(), rand());        // Generates a 96-bit Hex number
于 2010-02-02T06:34:03.423 に答える
10

私が見つけた(Linux開発者向けの)良い方法は、#include <uuid/uuid.h>. 次に、呼び出すことができる関数がいくつかあります。

void uuid_generate(uuid_t out);
void uuid_generate_random(uuid_t out);
于 2014-09-12T23:32:58.243 に答える
3

libuuid に静的にリンクできない理由はありますか?

于 2010-02-01T05:47:49.817 に答える
2

おそらくooidが役立ちますか?http://ooid.sourceforge.net/

于 2010-02-01T05:13:05.283 に答える
2

POSIX には UUID を生成するためのシステム コールは存在しませんが、UUID を生成するための BSD/MIT コードがどこかにあると思います。ooid は、Boost ソフトウェア ライセンスの下でリリースされます。これは、ウィキペディアによると、BSD/MIT スタイルの寛容なライセンスです。次に、依存関係を追加する必要なく、アプリケーションに貼り付けるだけです。

于 2010-02-01T05:18:34.920 に答える