C生成唯一ID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C生成唯一ID相关的知识,希望对你有一定的参考价值。

我正在创建一个C包装程序,它可以读取存储在文本文件中的数据结构类型。接口应该是我可以生成映射到唯一数据结构的唯一ID,并通过包装函数通过唯一ID进行修改。

问题是我需要能够生成一个唯一的ID进行映射。我不想使用任何外部库。有没有什么方法可以在没有任何大笔开销的情况下进行此操作?

答案

我想您实际上希望id在全世界范围内都是唯一的(因此,在两台不同计算机上的两台不同计算机上运行程序的两个进程将始终具有不同的id)。

否则,只需在包装器中使用static long counter;,然后使用id = counter++;

您可以为此目的使用UUID

或者您可以生成随机- 24字节字符串(或两个或三个随机uint64_t数字)。如果您的数字是“足够的”随机数(至少在启动时使用随机种子(例如,使用随机源àla PRNG(或random(4))或当前时间和进程ID)播出好的getrandom(2) &主机ID;请确保使用状态足够大的PRNG)collisions的可能性应该可以忽略不计(但我不能够或不愿量化它)。

FWIW,在我的MELT监视器中,我在文件mom_make_random_idstr的例程random.c中(在Linux上)执行类似的操作;随机字符串包含一组严格限制的字符(与C标识符兼容)。还要查看Bismonid_BM.c文件和randomid_BMidtocbuf32_BM的内部,或RefPerSys的内部。

您还可以从MongoDb objids中获得一些启发。

另请参见this related question

以上是关于C生成唯一ID的主要内容,如果未能解决你的问题,请参考以下文章

游戏服务器生成全局唯一ID的几种方法

C生成唯一ID

C ++生成唯一ID [重复]

php循环生成10个唯一代码,但只保存mysql上的最后一个代码

片段 - 替换容器,如果 id 不是唯一的

Android能够获取到唯一的设备ID吗